Note: There are some significant changes like the smaller project size in GSoC 2021, see details at GSoC official site: https://opensource.googleblog.com/2020/10/google-summer-of-code-2021-is-bringing.html
Google Summer of Code (GSoC) is a global program held by Google to bring students into open source software development. Students work with an open source organization on a 3 month programming project during their break from school. See more details at: https://summerofcode.withgoogle.com/
Casbin has been selected as a Google Summer of Code 2021 mentor organization for the second year!
We still don't know how many slots we will get yet. But students are already free-to-go to make contact with Casbin people and do some code-level contributions to Casbin projects to let the community know you more.
The student will be more likely selected if he/she:
- Contribute to Casbin related project before.
- Familiar with the techniques required by the idea he selected.
- Show the previous code related to the idea on personal website or GitHub.
- Provide a personal website and descriptions for previous work/projects.
- Provide demo sites for the previous projects if possible.
- Provide a resume/CV.
- Choose an idea from our list: https://github.com/casbin/SummerOfCode2021
- Send your resume/CV in PDF to: admin@casbin.org
- Do a self-introduction in: https://gitter.im/casbin/gsoc
- Get familiar with the existing code, try to solve opened issues for your chosen idea's repo before & after application deadline.
- If you have questions, you can ask the mentor of the idea via GitHub or Gitter.
- Submit your proposal in GSoC official site. The deadline is TBD.
- Casbin Core Engine (Golang)
- Casdoor
- Casbin Forum
- Casbin for C/C++
- Casbin for Java
- Casbin for .NET
- Casbin Sam
- Casbin for Rust
- Casbin for Node.js
- Casbin Hub
- Casbin for PHP
- Casbin for Python
- Casbin.js
- Casbin for Lua
- Casbin for Dart
Support more features and tune the performance in Casbin core engine. This will first be done in Golang Casbin. Possibly applied to other language implementations.
Some issues to work on:
- Resolve policy conflicts: casbin/casbin#338
- Improve the performance of the new BatchEnforce() API: casbin/casbin#710
- Make an authorization plugin/middleware for kubernetes (k8s): casbin/k8s-authz#2
- Help solve issues for the 1st-party and 3rd-party middlewares
- Golang
- Other languages that Casbin is written with
Yang Luo, Casbin founder
Build a UI-first centralized authentication / Single-Sign-On (SSO) platform based on OAuth 2.0 / OIDC. It can:
- Use OAuth 2.0 + OIDC as the authentication protocols.
- Support popular 3rd-party identity providers like Google, GitHub, Facebook, etc.
- Has a web portal to manage users, roles and permissions.
- Use Casbin as authorization method.
- Support user register, login, password reset, 2FA like Email and SMS.
The current progress is: https://door.casbin.com/. Source code: https://github.com/casbin/casdoor. We want the student to continue the work.
- Golang (backend)
- Javascript + React + Ant Design (frontend)
- Casbin
Yang Luo, Casbin founder
Casbin-forum is a light-weight forum software. It is used by Casbin community as the official developer forum (https://forum.casbin.com/). We hope to fix its bugs and add more features like mailing list to replace the traditional open-source community mailing list.
The current progress is: https://github.com/casbin/casbin-forum
Some issues to work on:
- Integrate open-source mailing list functionality to our forum: casibase/casibase#112
- Make it SEO friendly via SSR: casibase/casibase#122
- The text area is at risk of XSS injection: casibase/casibase#131
- The ranking pages do not display correctly: casibase/casibase#132
- Use Casdoor as the authentication system: casibase/casibase#145
- Golang (backend)
- Javascript + React (frontend)
- Casbin
Junjie Zhang, Casbin member, Yang Luo, Casbin founder
We already have a C/C++ version Casbin called Casbin-CPP. It already works on all primary OSs, like Windows, Linux, macOS. Most of Casbin's functionalities (for example 90%) should work. There are still many bugs and missing features in Casbin-CPP. Moreover, we also need to make authz middlewares for other C++ projects like Mosquitto and adapters for DB. We also have plan to make Casbin-CPP as a base layer to build the next-generation PyCasbin and PHP-Casbin on top of it (see PyCasbin on CPP) for better performance (a lot of Python packages like numpy and tensorflow rely on the underlying C++ code). So Casbin-CPP needs to provide necessary help if needed for PyCasbin and PHP-Casbin developers.
The current progress is: https://github.com/casbin/casbin-cpp
- C/C++
- Golang (only need to read code)
Joey Xie, Casbin member, Yang Luo, Casbin founder
In Java world, Apache Shiro and Spring Security are very popular security frameworks. We need to find ways to improve the Casbin middlewares for both of them, so Shiro and Spring Security users can use jCasbin without many migrating efforts.
Another work is to develop jCasbin' middleware for the popular Java web frameworks except Spring such as Play and Vert.x, like how we did it for Golang: https://casbin.org/docs/en/middlewares
Some issues to work on:
- Make a Play Framework middleware: casbin/jcasbin#104
- Make a Vert.x middleware: casbin/jcasbin#105
- Fix the bug about "ABAC with policy rule" doesn't work: casbin/jcasbin#145
- Improve the user experience of the SpringBoot middleware: https://github.com/jcasbin/casbin-spring-boot-starter
- Make an example project that uses our Shiro middleware: https://github.com/jcasbin/shiro-casbin
- Java
- Other languages that Casbin is written with
Zhengjin Fang, Casbin member, Yang Luo, Casbin founder
The feature and ecosystem of Casbin.NET are gradually improving. We hope to provide complete features with a goal to Golang Casbin, excellent performance, and suitable for user experience in .NET. There are some important features that need to be implemented:
- Rule Indexing feature : casbin/Casbin.NET#132
- Parallel enforcing feature : casbin/Casbin.NET#133
- Multiple request, policy, effect, matcher type support : casbin/Casbin.NET#134
- .NET/C#
- Other languages that Casbin is written with
Joey Xie, Casbin member, Zhikui Hua, Casbin member
A authorization service based on OAuth 2.x and support centralized authentication / Single-Sign-On (SSO) integration. It can:
- Use Casbin.NET and Casbin.AspNetCore to authorizate.
- Provide Web APIs to manage users, roles and permissions.
- Support integrate OIDC authentication provider (Identity Server 4) and ASP.NET Identity to manage user and sgin in/out.
- Support be integrated to Dapr or Steeltoe as authentication/authorization provider.
The current progress is: https://github.com/casbin-net/casbin-sam. We want the student to continue the work.
- .NET/C#
- Casbin.NET and Casbin.AspNetCore
- Dapr or Steeltoe
Joey, Casbin member, Zhikui Hua, Casbin member, Yang Luo, Casbin founder
With Casbin community's effort, the Rust version of Casbin is now mature and ready for production. Casbin-RS can provide access control with blazing fast speed. There are something need to be implemented:
- Rust version of Casbin-Server
-
Use Tonic to implement a gRPC server
-
Compatible with multiple adapters: Diesel-Adapter, Sqlx-Adapter, YAML-Adapter
- JSON Adapter for Casbin-RS
- Rocket Middleware for Casbin-RS (#93)
- Rust
- Other languages that Casbin is written with
Yisheng Chai, Casbin member, Cheng JIANG, Casbin member, Yang Luo, Casbin founder
Improving the user experience of Node-Casbin will be our focus. Currently, Node-Casbin provides a set of asynchronous API, if we can provide a set of synchronous API, it will be a great experience.
Some issues to work on:
-
Support a full set of Sync API like enforcer.enforce()(casbin/node-casbin#224)
-
Scaling Access Control Lists for multi-million users(casbin/node-casbin#147)
-
Sequelize v6 compatibility: addPolicies & removePolicies problem(casbin/node-casbin#207)
- JavaScript (Node.js/TypeScript)
- Other languages that Casbin is written with
Zixuan Liu, Casbin member
Casbin Hub is similar to Docker Hub website, which is mainly used to share and discuss the model and policy of Casbin, we need to implement the following features:
-
Support anyone to share the model and policy of Casbin. Sharers must describe the scenario that this model applies, and mark the classification, like so: Frontend, Backend, Cloud, Message System, and so on. Users can discuss shared content.
-
Integrate the Casbin-Online-Editor is used to test or debug the model and policy shared by users.
- Golang (Backend)
- React (Frontend)
- Casbin
Zixuan Liu, Casbin member, Yang Luo, Casbin founder
- Full implementation of Casbin(go) by PHP, then fix issues.
- Improve some extensions.
- PHP
- Casbin
Jon Lee, Casbin member
- At present, compared to Casbin for Golang,
Pycasbin
is not very perfect, especially the lack of RBAC API, so we hope thatPycasbin
can fully implement the function of Casbin (Go). PyCasbin
's adaptation to various frameworks, such asDjango
,Tornado
, etc.
Pycasbin organization: https://github.com/pycasbin Some issues to work on: https://github.com/casbin/pycasbin/issues
- Python
- Other languages that Casbin is written with
Jon Lee, Casbin member
Quite a lot of users want to use Casbin to control web frontend UI elements, like:
- Some tabs are only visible to admin users.
- Some buttons should be grayed-out for users with no permission to click them.
- A list can only show filtered items based on a user's permission rights.
Currently, Node-Casbin already supports to run in browser. But the API like enforce()
is still not friendly to frontend developers to control the visibility of a button. So we need:
- A frontend developer friendly API for authorization based on Casbin, e.g.,
isVisible(button_id)
- A mechanism to load model and policy data from backend. Of course we assume the backend also uses a Casbin implementation.
The current progress is: https://github.com/casbin/casbin.js
Currently, we still lack the middlewares for Angular, React and Vue. These new JS frameworks are very popular and making middlewares for them will boost our usage from their population.
Some issues to work on:
- Make a React authz middleware for Casbin.js: casbin/casbin.js#26
- Make a Vue authz middleware for Casbin.js: casbin/casbin.js#27
- Support Key Matching: casbin/casbin.js#15
- Support domains in model: casbin/casbin.js#25
- Resolve Casbin.js 0.1.0 with react-scripts 4.0.2 conflict: casbin/casbin.js#28
- Javascript
- Node-Casbin
- At least one backend language like Golang
Zihui Liu, Casbin member, Yang Luo, Casbin founder
Port Golang Casbin into Lua. We call it lua-casbin
. It should work on the Nginx + OpenResty stack. Most of Casbin's functionalities (for example 90%) should work.
Nginx is now the most popular HTTP server in the world. OpenResty is a web platform based on Nginx which can run Lua scripts using its LuaJIT engine. Nginx + OpenResty are usually used in edge computing and authorization is a real need for its scenario. Lua-Casbin will help Nginx and OpenResty users on checking permissions of the coming HTTP request.
The current progress is: https://github.com/casbin/lua-casbin
- Nginx
- OpenResty
- Lua
- Golang (only need to read code)
Yang Luo, Casbin founder
Port Casbin to Dart, little progress has been made in the project so it's excellent for jumping in early, you will be responsible for the design and making of the Dart port with the help of the mentor, most of Casbin's functionalities should work.
The current progress is: https://github.com/casbin/dart-casbin
- Dart
- Other languages that Casbin is written with.
Tomás Arias, Casbin member