UNPKG

9.49 kBMarkdownView Raw
1# Node-Casbin
2
3[![NPM version][npm-image]][npm-url]
4[![NPM download][download-image]][download-url]
5[![install size](https://packagephobia.now.sh/badge?p=casbin)](https://packagephobia.now.sh/result?p=casbin)
6[![codebeat badge](https://codebeat.co/badges/c17c9ee1-da42-4db3-8047-9574ad2b23b1)](https://codebeat.co/projects/github-com-casbin-node-casbin-master)
7[![GitHub Actions](https://github.com/casbin/node-casbin/workflows/main/badge.svg)](https://github.com/casbin/node-casbin/actions)
8[![Coverage Status](https://coveralls.io/repos/github/casbin/node-casbin/badge.svg?branch=master)](https://coveralls.io/github/casbin/node-casbin?branch=master)
9[![Release](https://img.shields.io/github/release/casbin/node-casbin.svg)](https://github.com/casbin/node-casbin/releases/latest)
10[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/casbin/lobby)
11
12[npm-image]: https://img.shields.io/npm/v/casbin.svg?style=flat-square
13[npm-url]: https://npmjs.org/package/casbin
14[download-image]: https://img.shields.io/npm/dm/casbin.svg?style=flat-square
15[download-url]: https://npmjs.org/package/casbin
16
17💖 [**Looking for an open-source identity and access management solution like Okta, Auth0, Keycloak ? Learn more about: Casdoor**](https://casdoor.org/)
18
19<a href="https://casdoor.org/"><img src="https://user-images.githubusercontent.com/3787410/147868267-6ac74908-5654-4f9c-ac79-8852af9ff925.png" alt="casdoor" style="width: 50%; height: 50%"/></a>
20
21**News**: still worry about how to write the correct `node-casbin` policy? [Casbin online editor](http://casbin.org/en/editor) is coming to help!
22
23![casbin Logo](casbin-logo.png)
24
25`node-casbin` is a powerful and efficient open-source access control library for Node.JS projects. It provides support for enforcing authorization based on various [access control models](https://en.wikipedia.org/wiki/Computer_security_model).
26
27## All the languages supported by Casbin:
28
29| [![golang](https://casbin.org/img/langs/golang.png)](https://github.com/casbin/casbin) | [![java](https://casbin.org/img/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.org/img/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.org/img/langs/php.png)](https://github.com/php-casbin/php-casbin) |
30| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
31| [Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) |
32| production-ready | production-ready | production-ready | production-ready |
33
34| [![python](https://casbin.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![c++](https://casbin.org/img/langs/cpp.png)](https://github.com/casbin/casbin-cpp) | [![rust](https://casbin.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) |
35| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
36| [PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin-CPP](https://github.com/casbin/casbin-cpp) | [Casbin-RS](https://github.com/casbin/casbin-rs) |
37| production-ready | production-ready | beta-test | production-ready |
38
39## Documentation
40
41https://casbin.org/docs/en/overview
42
43## Installation
44
45```shell script
46# NPM
47npm install casbin --save
48
49# Yarn
50yarn add casbin
51```
52
53## Get started
54
55New a `node-casbin` enforcer with a model file and a policy file, see [Model](#official-model) section for details:
56
57```node.js
58// For Node.js:
59const { newEnforcer } = require('casbin');
60// For browser:
61// import { newEnforcer } from 'casbin';
62
63const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv');
64```
65
66> **Note**: you can also initialize an enforcer with policy in DB instead of file, see [Persistence](#policy-persistence) section for details.
67
68Add an enforcement hook into your code right before the access happens:
69
70```node.js
71const sub = 'alice'; // the user that wants to access a resource.
72const obj = 'data1'; // the resource that is going to be accessed.
73const act = 'read'; // the operation that the user performs on the resource.
74
75// Async:
76const res = await enforcer.enforce(sub, obj, act);
77// Sync:
78// const res = enforcer.enforceSync(sub, obj, act);
79
80if (res) {
81 // permit alice to read data1
82} else {
83 // deny the request, show an error
84}
85```
86
87Besides the static policy file, `node-casbin` also provides API for permission management at run-time.
88For example, You can get all the roles assigned to a user as below:
89
90```node.js
91const roles = await enforcer.getRolesForUser('alice');
92```
93
94See [Policy management APIs](#policy-management) for more usage.
95
96## Policy management
97
98Casbin provides two sets of APIs to manage permissions:
99
100- [Management API](https://casbin.org/docs/en/management-api): the primitive API that provides full support for Casbin policy management.
101- [RBAC API](https://casbin.org/docs/en/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.
102
103## Official Model
104
105https://casbin.org/docs/en/supported-models
106
107## Policy persistence
108
109https://casbin.org/docs/en/adapters
110
111## Policy consistence between multiple nodes
112
113https://casbin.org/docs/en/watchers
114
115## Role manager
116
117https://casbin.org/docs/en/role-managers
118
119## Contributors
120
121This project exists thanks to all the people who contribute.
122<a href="https://github.com/casbin/node-casbin/graphs/contributors"><img src="https://opencollective.com/node-casbin/contributors.svg?width=890&button=false" /></a>
123
124## Backers
125
126Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/casbin#backer)]
127
128<a href="https://opencollective.com/casbin#backers" target="_blank"><img src="https://opencollective.com/casbin/backers.svg?width=890"></a>
129
130## Sponsors
131
132Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/casbin#sponsor)]
133
134<a href="https://opencollective.com/casbin/sponsor/0/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/0/avatar.svg"></a>
135<a href="https://opencollective.com/casbin/sponsor/1/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/1/avatar.svg"></a>
136<a href="https://opencollective.com/casbin/sponsor/2/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/2/avatar.svg"></a>
137<a href="https://opencollective.com/casbin/sponsor/3/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/3/avatar.svg"></a>
138<a href="https://opencollective.com/casbin/sponsor/4/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/4/avatar.svg"></a>
139<a href="https://opencollective.com/casbin/sponsor/5/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/5/avatar.svg"></a>
140<a href="https://opencollective.com/casbin/sponsor/6/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/6/avatar.svg"></a>
141<a href="https://opencollective.com/casbin/sponsor/7/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/7/avatar.svg"></a>
142<a href="https://opencollective.com/casbin/sponsor/8/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/8/avatar.svg"></a>
143<a href="https://opencollective.com/casbin/sponsor/9/website" target="_blank"><img src="https://opencollective.com/casbin/sponsor/9/avatar.svg"></a>
144
145## License
146
147This project is licensed under the [Apache 2.0 license](LICENSE).
148
149## Contact
150
151If you have any issues or feature requests, please contact us. PR is welcomed.
152
153- https://github.com/casbin/node-casbin/issues
154- hsluoyz@gmail.com
155- Tencent QQ group: [546057381](//shang.qq.com/wpa/qunwpa?idkey=8ac8b91fc97ace3d383d0035f7aa06f7d670fd8e8d4837347354a31c18fac885)