fix: fix bug that removeFilteredPolicy is not working properly (#58) * fix: issues (#57) * fix: fix bug that removeFilteredPolicy is not working properly
TypeORM Adapter is the TypeORM adapter for Node-Casbin. With this library, Node-Casbin can load policy from TypeORM supported database or save policy to it.
Based on Officially Supported Databases, the current supported databases are:
You may find other 3rd-party supported DBs in TypeORM website or other places.
npm install typeorm-adapter
import { newEnforcer } from 'casbin'; import TypeORMAdapter from 'typeorm-adapter'; async function myFunction() { // Initialize a TypeORM adapter and use it in a Node-Casbin enforcer: // The adapter can not automatically create database. // But the adapter will automatically and use the table named "casbin_rule". // I think ORM should not automatically create databases. const a = await TypeORMAdapter.newAdapter({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '', database: 'casbin', }); const e = await newEnforcer('examples/rbac_model.conf', a); // Load the policy from DB. await e.loadPolicy(); // Check the permission. await e.enforce('alice', 'data1', 'read'); // Modify the policy. // await e.addPolicy(...); // await e.removePolicy(...); // Save the policy back to DB. await e.savePolicy(); }
import { newEnforcer } from 'casbin'; import TypeORMAdapter from 'typeorm-adapter'; async function myFunction() { // Initialize a TypeORM adapter and use it in a Node-Casbin enforcer: // The adapter can not automatically create database. // But the adapter will automatically and use the table named "casbin_rule". // I think ORM should not automatically create databases. const a = await TypeORMAdapter.newAdapter({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '', database: 'casbin', }); const e = await newEnforcer('examples/rbac_model.conf', a); // Load the filtered policy from DB. await e.loadFilteredPolicy({ 'ptype': 'p', 'v0': 'alice' }); // Check the permission. await e.enforce('alice', 'data1', 'read'); // Modify the policy. // await e.addPolicy(...); // await e.removePolicy(...); // Save the policy back to DB. await e.savePolicy(); }
Use a custom entity that matches the CasbinRule or MongoCasbinRule in order to add additional fields or metadata to the entity.
import { newEnforcer } from 'casbin'; import { CreateDateColumn, UpdateDateColumn, } from 'typeorm'; import TypeORMAdapter from 'typeorm-adapter'; @Entity('custom_rule') class CustomCasbinRule extends CasbinRule { @CreateDateColumn() createdDate: Date; @UpdateDateColumn() updatedDate: Date; } async function myFunction() { // Initialize a TypeORM adapter and use it in a Node-Casbin enforcer: // The adapter can not automatically create database. // But the adapter will automatically and use the table named "casbin_rule". // I think ORM should not automatically create databases. const a = await TypeORMAdapter.newAdapter( { type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '', database: 'casbin', }, { customCasbinRuleEntity: CustomCasbinRule, }, ); const e = await newEnforcer('examples/rbac_model.conf', a); // Load the filtered policy from DB. await e.loadFilteredPolicy({ 'ptype': 'p', 'v0': 'alice' }); // Check the permission. await e.enforce('alice', 'data1', 'read'); // Modify the policy. // await e.addPolicy(...); // await e.removePolicy(...); // Save the policy back to DB. await e.savePolicy(); }
This project is under Apache 2.0 License. See the LICENSE file for the full license text.