• Stars
    star
    1,149
  • Rank 40,592 (Top 0.8 %)
  • Language
    C#
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An authorization library that supports access control models like ACL, RBAC, ABAC in .NET (C#)

Casbin.NET

Build Status Coverage Status Nuget Release Nuget Gitter

News: still worry about how to write the correct Casbin policy? Casbin online editor is coming to help! Try it at: http://casbin.org/editor/

Casbin.NET is a powerful and efficient open-source access control library for .NET (C#) projects. It provides support for enforcing authorization based on various access control models.

All the languages supported by Casbin:

golang java nodejs php
Casbin jCasbin node-Casbin PHP-Casbin
production-ready production-ready production-ready production-ready
python dotnet delphi rust
PyCasbin Casbin.NET Casbin4D Casbin-RS
production-ready production-ready experimental production-ready

Table of contents

Supported models

  1. ACL (Access Control List)
  2. ACL with superuser
  3. ACL without users: especially useful for systems that don't have authentication or user log-ins.
  4. ACL without resources: some scenarios may target for a type of resources instead of an individual resource by using permissions like write-article, read-log. It doesn't control the access to a specific article or log.
  5. RBAC (Role-Based Access Control)
  6. RBAC with resource roles: both users and resources can have roles (or groups) at the same time.
  7. RBAC with domains/tenants: users can have different role sets for different domains/tenants.
  8. ABAC (Attribute-Based Access Control): syntax sugar like resource.Owner can be used to get the attribute for a resource.
  9. RESTful: supports paths like /res/*, /res/:id and HTTP methods like GET, POST, PUT, DELETE.
  10. Deny-override: both allow and deny authorizations are supported, deny overrides the allow.
  11. Priority: the policy rules can be prioritized like firewall rules.

How it works?

In Casbin, an access control model is abstracted into a CONF file based on the PERM metamodel (Policy, Effect, Request, Matchers). So switching or upgrading the authorization mechanism for a project is just as simple as modifying a configuration. You can customize your own access control model by combining the available models. For example, you can get RBAC roles and ABAC attributes together inside one model and share one set of policy rules.

The most basic and simplest model in Casbin is ACL. ACL's model CONF is:

# Request definition
[request_definition]
r = sub, obj, act

# Policy definition
[policy_definition]
p = sub, obj, act

# Policy effect
[policy_effect]
e = some(where (p.eft == allow))

# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

An example policy for ACL model is like:

p, alice, data1, read
p, bob, data2, write

It means:

  • alice can read data1
  • bob can write data2

We also support multi-line mode by appending '\' in the end:

# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
  && r.act == p.act

Further more, if you are using ABAC, you can try operator in like following in Casbin golang edition (jCasbin and Node-Casbin are not supported yet):

# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')

But you SHOULD make sure that the length of the array is MORE than 1, otherwise there will cause it to panic.

For more operators, you may take a look at govaluate

Features

What Casbin does:

  1. enforce the policy in the classic {subject, object, action} form or a customized form as you defined, both allow and deny authorizations are supported.
  2. handle the storage of the access control model and its policy.
  3. manage the role-user mappings and role-role mappings (aka role hierarchy in RBAC).
  4. support built-in superuser like root or administrator. A superuser can do anything without explict permissions.
  5. multiple built-in operators to support the rule matching. For example, keyMatch can map a resource key /foo/bar to the pattern /foo*.

What Casbin does NOT do:

  1. authentication (aka verify username and password when a user logs in)
  2. manage the list of users or roles. I believe it's more convenient for the project itself to manage these entities. Users usually have their passwords, and Casbin is not designed as a password container. However, Casbin stores the user-role mapping for the RBAC scenario.

Installation

dotnet add package Casbin.NET

Documentation

https://casbin.org/docs/overview

Online editor

You can also use the online editor (http://casbin.org/editor/) to write your Casbin model and policy in your web browser. It provides functionality such as syntax highlighting and code completion, just like an IDE for a programming language.

Tutorials

https://casbin.org/docs/tutorials

Get started

  1. New a Casbin enforcer with a model file and a policy file:

    var e = new Enforcer("path/to/model.conf", "path/to/policy.csv")

Note: you can also initialize an enforcer with policy in DB instead of file, see Persistence section for details.

  1. Add an enforcement hook into your code right before the access happens:

    var sub = "alice" // the user that wants to access a resource.
    var obj = "data1" // the resource that is going to be accessed.
    var act = "read" // the operation that the user performs on the resource.
    
    if (e.Enforce(sub, obj, act)) {
        // permit alice to read data1
    } else {
        // deny the request, show an error
    }
  2. Besides the static policy file, Casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below:

    var roles = e.GetRolesForUser("alice")

See Policy management APIs for more usage.

  1. Please refer to the Casbin.UnitTest project for more usage.

Policy management

Casbin provides two sets of APIs to manage permissions:

  • Management API: the primitive API that provides full support for Casbin policy management. See here for examples.
  • RBAC API: a more friendly API for RBAC. This API is a subset of Management API. The RBAC users could use this API to simplify the code. See here for examples.

We also provide a web-based UI for model management and policy management:

model editor

policy editor

Policy persistence

https://casbin.org/docs/adapters

Policy consistence between multiple nodes

https://casbin.org/docs/watchers

Role manager

https://casbin.org/docs/role-managers

Benchmarks

https://casbin.org/docs/benchmark

Examples

Model Model file Policy file
ACL basic_model.conf basic_policy.csv
ACL with superuser basic_model_with_root.conf basic_policy.csv
ACL without users basic_model_without_users.conf basic_policy_without_users.csv
ACL without resources basic_model_without_resources.conf basic_policy_without_resources.csv
RBAC rbac_model.conf rbac_policy.csv
RBAC with resource roles rbac_model_with_resource_roles.conf rbac_policy_with_resource_roles.csv
RBAC with domains/tenants rbac_model_with_domains.conf rbac_policy_with_domains.csv
ABAC abac_model.conf N/A
RESTful keymatch_model.conf keymatch_policy.csv
Deny-override rbac_model_with_deny.conf rbac_policy_with_deny.csv
Priority priority_model.conf priority_policy.csv

Middlewares

Authz middlewares for web frameworks: https://casbin.org/docs/middlewares

Our adopters

https://casbin.org/docs/adopters

Contributors

This project exists thanks to all the people who contribute.

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

License

This project is licensed under the Apache 2.0 license.

More Repositories

1

casbin

An authorization library that supports access control models like ACL, RBAC, ABAC in Golang: https://discord.gg/S5UjpzGZjN
Go
17,436
star
2

casdoor

An open-source UI-first Identity and Access Management (IAM) / Single-Sign-On (SSO) platform with web UI supporting OAuth 2.0, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA and RADIUS
Go
7,562
star
3

node-casbin

An authorization library that supports access control models like ACL, RBAC, ABAC in Node.js and Browser
TypeScript
2,569
star
4

jcasbin

An authorization library that supports access control models like ACL, RBAC, ABAC in Java
Java
2,379
star
5

pycasbin

An authorization library that supports access control models like ACL, RBAC, ABAC in Python
Python
1,355
star
6

casibase

Open-Source Domain Knowledge Database & IM & Forum Software powered by ChatGPT. See demo: https://ai.casbin.com
JavaScript
1,030
star
7

awesome-auth

📊 Software and Libraries for Authentication & Authorization & SSO & IAM
949
star
8

casbin-rs

An authorization library that supports access control models like ACL, RBAC, ABAC in Rust.
Rust
826
star
9

gorm-adapter

GORM adapter for Casbin, see extended version of GORM Adapter Ex at: https://github.com/casbin/gorm-adapter-ex
Go
675
star
10

xorm-adapter

Xorm adapter for Casbin
Go
383
star
11

caswaf

HTTP & OAuth Gateway and Web Application Firewall (WAF) based on ModSecurity, online demo: https://door.caswaf.com
Go
309
star
12

casbin-server

Casbin as a Service (CaaS)
Go
304
star
13

mongodb-adapter

MongoDB adapter for Casbin
Go
256
star
14

caddy-authz

Caddy-authz is a middleware for Caddy that blocks or allows requests based on access control policies.
Go
240
star
15

casbin-cpp

An authorization library that supports access control models like ACL, RBAC, ABAC in C/C++
C++
221
star
16

docker-casbin-plugin

Docker RBAC and ABAC Authorization Plugin Based on Casbin: https://github.com/casbin/casbin
Go
213
star
17

redis-adapter

Redis adapter for Casbin
Go
193
star
18

protobuf-adapter

Google Protocol Buffers adapter for Casbin
Go
191
star
19

etcd-watcher

Etcd watcher for Casbin
Go
171
star
20

casbin.js

An authorization library that supports access control models like ACL, RBAC, ABAC in Frontend Javascript
TypeScript
161
star
21

negroni-authz

negroni-authz is an authorization middleware for Negroni
Go
157
star
22

casdoor-old

An open-source Identity and Access Management (IAM) / Single-Sign-On (SSO) platform with web UI supporting OAuth 2.0, OIDC, SAML, CAS, LDAP, WebAuthn, TOTP and MFA
Go
104
star
23

casbin-hub

The hub for Casbin
JavaScript
87
star
24

casbin-editor

Web-based model & policy editor for Casbin
TypeScript
85
star
25

casnode

Open-Source Forum and Social Platform, Alternative to StackOverflow & Flarum
Go
75
star
26

casbin-ex

An authorization library that supports access control models like ACL, RBAC, ABAC in Elixir
Elixir
70
star
27

Talent2023

Casbin明日之星预选生计划-Talents for Casbin 2023 【学生报名请加QQ群:540163681】
67
star
28

lua-casbin

An authorization library that supports access control models like ACL, RBAC, ABAC in Lua (Kong, APISIX, OpenResty)
Lua
55
star
29

ent-adapter

Ent adapter for Casbin
Go
51
star
30

casbin-oa

The OA system used by Casbin community
Go
41
star
31

casbin-website

Deprecated! Please use v2 docs site: https://github.com/casbin/casbin-website-v2 | The v1 docs website for Casbin
JavaScript
39
star
32

casbin-pg-adapter

A go-pg adapter for casbin
Go
38
star
33

dart-casbin

An authorization library that supports access control models like ACL, RBAC, ABAC in Dart/Flutter
Dart
36
star
34

redis-watcher

Redis WatcherEx for Casbin
Go
34
star
35

k8s-gatekeeper

Kubernetes (k8s) admission controller webhook based on Casbin
Go
34
star
36

openstack-policy-editor

A Casbin Policy Editor for OpenStack
JavaScript
32
star
37

k8s-authz

Kubernetes (k8s) RBAC & ABAC authorization middleware based on Casbin
Go
28
star
38

casbin-go-client

Go client for Casbin-Server
Go
25
star
39

casbin-mesh

A scalable authorization layer built on Casbin (The experimental project is currently unstable)
Go
25
star
40

SummerOfCode2022

GSoC 2022 Idea List for Casbin
24
star
41

casbin-vscode-plugin

VSCode plugin for working with Casbin Models
JavaScript
23
star
42

beego-orm-adapter

Beego ORM adapter for Casbin
Go
21
star
43

envoy-authz

Istio/Envoy RBAC & ABAC authorization middleware based on Casbin
Go
20
star
44

casbin-website-v2

The new docs website for Casbin based on Docusaurus v2
JavaScript
19
star
45

hraft-dispatcher

A dispatcher based on Hashicorp's Raft for Casbin.
Go
18
star
46

json-adapter

JSON adapter for Casbin
Go
18
star
47

casbin-server-deprecated

Casbin as a Service via RESTful
Go
16
star
48

auth0-role-manager

Auth0 role manager for Casbin
Go
15
star
49

casbin-raft

Etcd Raft Dispatcher for Casbin
Go
14
star
50

govaluate

Arbitrary expression evaluation for golang, maintained by Casbin
Go
13
star
51

session-role-manager

Session based role manager for Casbin
Go
13
star
52

mysql-adapter

MySQL DB adapter for Casbin
Go
12
star
53

SwiftCasbin

An authorization library that supports access control models like ACL, RBAC, ABAC in iOS Swift / Objective-C
Swift
11
star
54

gorm-adapter-ex

Extended version of GORM Adapter, see original version of GORM Adapter at: https://github.com/casbin/gorm-adapter
Go
11
star
55

SummerOfCode2021

GSoC 2021 Idea List for Casbin
10
star
56

iam-to-casbin-translator

Translate AWS IAM policy to Casbin policy
Go
9
star
57

confita

An open-source version of Kaggle written in Go and React
Go
9
star
58

deno-casbin

An authorization library that supports access control models like ACL, RBAC, ABAC in Deno.
JavaScript
7
star
59

Summer2021

开源软件供应链点亮计划-暑期2021 for Casbin 【学生报名请加QQ群:540163681】
7
star
60

mux-authz

gorilla/mux's RBAC & ABAC Authorization middleware based on Casbin
Go
6
star
61

graphql-authz

graphql-authz is an authorization middleware for graphql-go
Go
6
star
62

Talent2024

Casbin明日之星预选生计划-Talents for Casbin 2024 【学生报名请加QQ群:540163681】
6
star
63

casbin-core

An authorization library that supports access control models like ACL, RBAC, ABAC in modern JavaScript platforms
TypeScript
6
star
64

kubesphere-authz

ACL, RBAC, ABAC authorization middleware for KubeSphere
Go
5
star
65

okta-role-manager

Okta role manager for Casbin
Go
5
star
66

cassandra-adapter

Cassandra DB adapter for Casbin
Go
5
star
67

zap-logger

Zap logger for Casbin
Go
5
star
68

google-groups-crawler

This tool is for legitimate use. We internally use it for synchronizing posts between Casnode forum and our own Casbin Google Group
Go
5
star
69

static

Casbin static resources like js, css, img
CSS
5
star
70

revel-authz

revel-authz is an authorization middleware for Revel
Go
4
star
71

xacml-to-casbin-translator

Translate XACML policy to Casbin policy
HTML
4
star
72

laravel-rbac

An authorization library that supports access control models like ACL, RBAC, ABAC in Laravel
PHP
4
star
73

casnode-web-new

JavaScript
3
star
74

casbin-pythonclient

Python client for Casbin Server
Python
3
star
75

scala-casbin

3
star
76

Summer2022

开源软件供应链点亮计划-暑期2022 for Casbin 【学生报名请加QQ群:540163681】
3
star
77

VisualPCD

VisualPCD aims to parse the XACML format policy file and detect the authorization conflicts between XACML policies.
C++
3
star
78

caswire

An open-source host-based anti-virus, firewall and IDS (Intrusion Detection System) platform: https://discord.gg/S5UjpzGZjN
JavaScript
2
star
79

casbin.github.io

The GitHub pages (static site) for: https://github.com/casbin/casbin-website
HTML
2
star
80

Summer2023

开源软件供应链点亮计划-暑期2023 for Casbin 【学生报名请加QQ群:540163681】
2
star
81

tyk-authz

Casbin authorization plugin for tyk API gateway
Go
2
star
82

caswaf-website

The docs website for CasWAF: https://github.com/casbin/caswaf
JavaScript
2
star
83

chi-authz

Chi Authorization Middleware based on Casbin
Go
2
star
84

SeasonOfDocs2022

Google Season of Docs 2022 Proposal for Casbin
2
star
85

casvisor

An open-source security log auditing & RDP, VNC, SSH bastion platform: https://discord.gg/S5UjpzGZjN
JavaScript
1
star
86

istio-authz

1
star
87

Permap

A permission mapper
Python
1
star
88

awesome-chatgpt

Software and Libraries for OpenAI & ChatGPT & LLM
1
star
89

casvisor-website

Docs site of Casvisor : https://github.com/casbin/casvisor
JavaScript
1
star
90

tikv-watcher

TiKV watcher for Casbin
Go
1
star
91

casdoc

Docs helper based on OpenAI ChatGPT
Go
1
star
92

pycasbin-on-cpp

An authorization library that supports access control models like ACL, RBAC, ABAC in Python, based on C/C++ (Casbin-CPP)
1
star