5.30.0 ā€¢ Published 1 day ago

casbin v5.30.0

Weekly downloads
17,697
License
Apache-2.0
Repository
github
Last release
1 day ago

Node-Casbin

NPM version NPM download install size codebeat badge GitHub Actions Coverage Status Release Discord

šŸ’– Looking for an open-source identity and access management solution like Okta, Auth0, Keycloak ? Learn more about: Casdoor

News: still worry about how to write the correct node-casbin policy? Casbin online editor is coming to help!

casbin Logo

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.

All the languages supported by Casbin:

golangjavanodejsphp
CasbinjCasbinnode-CasbinPHP-Casbin
production-readyproduction-readyproduction-readyproduction-ready
pythondotnetc++rust
PyCasbinCasbin.NETCasbin-CPPCasbin-RS
production-readyproduction-readybeta-testproduction-ready

Documentation

https://casbin.org/docs/overview

Installation

# NPM
npm install casbin --save

# Yarn
yarn add casbin

Get started

New a node-casbin enforcer with a model file and a policy file, see Model section for details:

// For Node.js:
const { newEnforcer } = require('casbin');
// For browser:
// import { newEnforcer } from 'casbin';

const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv');

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

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

const sub = 'alice'; // the user that wants to access a resource.
const obj = 'data1'; // the resource that is going to be accessed.
const act = 'read'; // the operation that the user performs on the resource.

// Async:
const res = await enforcer.enforce(sub, obj, act);
// Sync:
// const res = enforcer.enforceSync(sub, obj, act);

if (res) {
  // permit alice to read data1
} else {
  // deny the request, show an error
}

Besides the static policy file, node-casbin also provides API for permission management at run-time. For example, You can get all the roles assigned to a user as below:

const roles = await enforcer.getRolesForUser('alice');

See Policy management APIs 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.
  • 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.

Official Model

https://casbin.org/docs/supported-models

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

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.

Contact

If you have any issues or feature requests, please contact us. PR is welcomed.

vue-casbinpapiea-engineidentity-ws@codeloop/authorization-casbin@picker-cc/core@compassdigital/core@infinitebrahmanuniverse/nolb-casb@everything-registry/sub-chunk-1297@pardjs/nest-casbin@originforest/middleware-auth@onichandame/mongoose-adapter@sling/artus-web-server@navch/nest-auth@loopback/example-access-control-migration@loopeco/authorization-casbin@loopx/core@microloop/core@midwayjs/casbin@movenium/jsonapi-mongodb@mechsoft/common@mechsoft/enforcer@mechsoft/prisma-clientreact-authz@maxbuild/middleware-auth@knotel/authorize@ninja-1/koa-authz@ninja-1/typeorm-adapter@reinaldooli/nest-casbin@reinaldooli/typeorm-adapter@treenity/repository@zakariaelfakhry/typeorm-adapter@pickerjs/core@sphereon/ssi-sdk.uni-resolver-registrar-api@sphereon/ssi-sdk.contact-manager-rest-api@sphereon/ssi-sdk-web3.headless-provider@sphereon/ssi-sdk.express-support@sphereon/ssi-express-support@sphereon/ssi-sdk.w3c-vc-apiwrapper-routeegg-zroleerinlight-coreloopback4-authorizationgraphql-authzglobal-user-managecasbin-couchbase-adaptercasbin-dynamodb-adaptercasbin-mongodb-adapter-for-npmcasbin-mongoosecasbin-pg-adaptercasbinjs-server-toolcasbin-jwt-expresscasbin-mikroorm-adaptercasequelize@deboxsoft/users-apinexis-lb4-authorizationnestjs-casbinnestjs-casbin-modulenestjs-casbin-mongonestjs-casbin-mongodbnest-authzmidway-typeorm-casbinmikro-orm-adapteriris-eggjs-mongoose-adapter@elastic.io/casbin-mongoose-adapter@hypto/hypto_iam1@hypto/iam@ispm/common@janus-idp/backstage-plugin-rbac-backendplaycasbin@aeroline_1025/otzi@anthrax63/typeorm-adapter@aipeli/midway-casbin@zalastax/nolb-casbacl-nesttypeorm-adaptertorn-koa-authz@ubax/authorization-service@zcong/egg-casbin@zcong/koa-casbin@tzuhua/casbin-adapter@viron/libadditional-helpers@beamnetwork/eco-casbin-mongoose-adapter@beamnetwork/eco-nest-authz@bpfaas/middleware-auth@bleco/authorization@bleco/corewired-egg@bloom-housing/backend-corebleco-authorization@bonio-tw/casbin-adapter
5.30.0

1 day ago

5.29.0

17 days ago

5.27.1

7 months ago

5.27.0

8 months ago

5.28.0

5 months ago

5.26.2

9 months ago

5.24.4

1 year ago

5.25.0

1 year ago

5.26.1

1 year ago

5.26.0

1 year ago

5.24.3

1 year ago

5.24.2

1 year ago

5.24.1

1 year ago

5.24.0

1 year ago

5.23.2

1 year ago

5.23.1

1 year ago

5.23.0

1 year ago

5.20.4

1 year ago

5.20.3

1 year ago

5.20.2

1 year ago

5.20.1

1 year ago

5.20.0

1 year ago

5.21.0

1 year ago

5.22.0

1 year ago

5.19.3

1 year ago

5.19.2

1 year ago

5.19.1

2 years ago

5.18.0

2 years ago

5.19.0

2 years ago

5.16.0

2 years ago

5.17.0

2 years ago

5.15.2

2 years ago

5.15.0

2 years ago

5.14.0-beta.4

2 years ago

5.15.1

2 years ago

5.14.0-beta.3

2 years ago

5.14.0-beta.2

2 years ago

5.14.0

2 years ago

5.14.0-beta.1

2 years ago

5.13.2

2 years ago

5.13.1

2 years ago

5.13.0

2 years ago

5.12.0

2 years ago

5.11.5

3 years ago

5.11.4

3 years ago

5.11.3

3 years ago

5.11.2

3 years ago

5.11.1

3 years ago

5.11.0

3 years ago

5.10.0

3 years ago

5.9.1

3 years ago

5.9.0

3 years ago

5.8.0

3 years ago

5.7.2

3 years ago

5.7.1

3 years ago

5.7.0

3 years ago

5.6.3

3 years ago

5.6.2

3 years ago

5.6.1

3 years ago

5.6.0

3 years ago

5.5.0

3 years ago

5.4.2

3 years ago

5.4.1

3 years ago

5.4.0

3 years ago

5.3.1

3 years ago

5.2.3

3 years ago

5.2.2

3 years ago

5.2.1

3 years ago

5.2.0

4 years ago

5.1.6

4 years ago

5.1.5

4 years ago

5.1.4

4 years ago

5.1.3

4 years ago

5.1.2

4 years ago

5.1.1

4 years ago

5.1.0

4 years ago

5.0.7

4 years ago

5.0.6

4 years ago

5.0.5

4 years ago

5.0.4

4 years ago

5.0.3

4 years ago

5.0.2

4 years ago

5.0.1

4 years ago

5.0.0

4 years ago

4.7.2

4 years ago

4.7.1

4 years ago

4.7.0

4 years ago

4.6.0

4 years ago

4.5.0

4 years ago

4.5.0-0

4 years ago

4.4.0

4 years ago

4.3.1

4 years ago

4.3.0

4 years ago

4.2.1

4 years ago

4.2.0

4 years ago

4.1.1

4 years ago

4.1.0

4 years ago

4.0.0

4 years ago

3.1.0

4 years ago

3.0.9

4 years ago

3.0.8

4 years ago

3.0.7

4 years ago

3.0.6

4 years ago

3.0.5

5 years ago

3.0.4

5 years ago

3.0.3

5 years ago

3.0.2

5 years ago

3.0.1

5 years ago

3.0.0

5 years ago

2.0.4

5 years ago

3.0.0-beta.1

5 years ago

2.0.3

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago