prisma-adapter
prisma-adapter copied to clipboard
Support for rbac_with_all_pattern?
rbac_model.conf
[request_definition]
r = sub, dom, obj, act
[policy_definition]
p = sub, dom, obj, act
[role_definition]
g = _, _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act
app.ts
import { PrismaClient } from '@prisma/client'
import * as casbin from 'casbin';
const prisma = new PrismaClient()
import { PrismaAdapter } from 'casbin-prisma-adapter';
async function main() {
// ... you will write your Prisma Client queries here
const a = await PrismaAdapter.newAdapter();
const e = await casbin.newEnforcer('./casbin/rbac_model.conf', a);
// Check the permission.
// const result =await e.enforce('alice', 'data1', 'read');
// console.log('result :>> ', result);
// Modify the policy.
await e.addPolicy('admin', 'application','post-/user', 'post');
await e.addPolicy('admin', 'application','put-/user/:id', 'put');
await e.addPolicy('admin', 'application','delete-/user/:id', 'delete');
await e.addPolicy('user', 'application','post-/user', 'post');
await e.addPolicy('user', 'application','put-/user/:id', 'put');
await e.addPolicy('user', 'application','delete-/user/:id', 'delete');
// await e.removePolicy(...);
const result1 =await e.enforce('user', 'application','put-/user/:id', 'put');
console.log('result1 :>> ', result1);
// result1 :>> true
// 获取当前策略中显示的 subject 列表
const allSubjects = await e.getAllSubjects()
console.log('allSubjects 获取当前策略中显示的 subject 策略规则 列表 :>> \n', allSubjects);
// allSubjects 获取当前策略中显示的 subject 策略规则 列表 :>>
[ 'admin', 'user' ]
const allNamedSubjects = await e.getAllNamedSubjects('p')
console.log('allNamedSubjects 获取当前命名策略中显示的 subject 策略规则 列表 :>> \n', allNamedSubjects);
// allNamedSubjects 获取当前命名策略中显示的 subject 策略规则 列表 :>>
[ 'admin', 'user' ]
const allObjects = await e.getAllObjects()
console.log('allObjects 获取当前策略中显示的 object 资源 列表 :>> \n', allObjects);
// allObjects 获取当前策略中显示的 object 资源 列表 :>>
[ 'application' ]
const allNamedObjects = await e.getAllNamedObjects('p')
console.log('allNamedObjects 获取当前命名策略中显示的 object 资源 列表 :>> \n', allNamedObjects);
// allNamedObjects 获取当前命名策略中显示的 object 资源 列表 :>>
[ 'application' ]
const allActions = await e.getAllActions()
console.log('allActions 获取当前策略中显示的操作列表 http动作 :>> \n', allActions);
// allActions 获取当前策略中显示的操作列表 http动作 :>>
[ 'post-/user', 'put-/user/:id', 'delete-/user/:id' ]
const allNamedActions = await e.getAllNamedActions('p')
console.log('allNamedActions 获取当前命名策略中显示的操作列表 http动作 :>> \n', allNamedActions);
// allNamedActions 获取当前命名策略中显示的操作列表 http动作 :>>
[ 'post-/user', 'put-/user/:id', 'delete-/user/:id' ]
const allRoles = await e.getAllRoles()
console.log('allRoles 获取当前策略中显示的角色列表 :>> \n', allRoles);
// allRoles 获取当前策略中显示的角色列表 :>>
[]
const allNamedRoles = await e.getAllNamedRoles('g')
console.log('allNamedRoles 获取当前命名策略中显示的角色列表 :>> \n', allNamedRoles);
// allNamedRoles 获取当前命名策略中显示的角色列表 :>>
[]
const policy = await e.getPolicy()
console.log('policy 获取策略中的所有授权规则 :>> \n', policy);
// policy 获取策略中的所有授权规则 :>>
[
[ 'admin', 'application', 'post-/user', 'post' ],
[ 'user', 'application', 'post-/user', 'post' ],
[ 'admin', 'application', 'put-/user/:id', 'put' ],
[ 'admin', 'application', 'delete-/user/:id', 'delete' ],
[ 'user', 'application', 'delete-/user/:id', 'delete' ],
[ 'user', 'application', 'put-/user/:id', 'put' ]
]
const filteredPolicy = await e.getFilteredPolicy(0, 'users')
console.log('filteredPolicy 获取策略中的所有授权规则,我们可以指定字段筛选器 :>> \n', filteredPolicy);
// filteredPolicy 获取策略中的所有授权规则,我们可以指定字段筛选器 :>>
[]
const namedPolicy = await e.getNamedPolicy('p')
console.log('namedPolicy 获取命名策略中的所有授权规则 :>> \n', namedPolicy);
// namedPolicy 获取命名策略中的所有授权规则 :>>
[
[ 'admin', 'application', 'post-/user', 'post' ],
[ 'user', 'application', 'post-/user', 'post' ],
[ 'admin', 'application', 'put-/user/:id', 'put' ],
[ 'admin', 'application', 'delete-/user/:id', 'delete' ],
[ 'user', 'application', 'delete-/user/:id', 'delete' ],
[ 'user', 'application', 'put-/user/:id', 'put' ]
]
const filteredNamedPolicy = await e.getFilteredNamedPolicy('p', 0, 'bob')
console.log('filteredNamedPolicy 获取命名策略中的所有授权规则,可以指定字段过滤器。 :>> \n', filteredNamedPolicy);
// filteredNamedPolicy 获取命名策略中的所有授权规则,可以指定字段过滤器。 :>>
[]
const groupingPolicy = await e.getGroupingPolicy()
console.log('groupingPolicy 获取策略中的所有角色继承规则 :>> \n', groupingPolicy);
// groupingPolicy 获取策略中的所有角色继承规则 :>>
[]
const filteredGroupingPolicy = await e.getFilteredGroupingPolicy(0, 'alice')
console.log('filteredGroupingPolicy 获取策略中的所有角色继承规则,可以指定字段筛选器。 :>> \n', filteredGroupingPolicy);
// filteredGroupingPolicy 获取策略中的所有角色继承规则,可以指定字段筛选器。 :>>
[]
// filteredGroupingPolicy 获取策略中的所有角色继承规则,可以指定字段筛选器。 :>>
[]
const namedGroupingPolicy = await e.getNamedGroupingPolicy('g')
console.log('namedGroupingPolicy 获取策略中的所有角色继承规则:>> \n', namedGroupingPolicy);
// namedGroupingPolicy 获取策略中的所有角色继承规则:>>
[]
const hasPolicy = await e.hasPolicy('data2_admin', 'data2', 'read')
console.log('hasPolicy 确定是否存在授权规则 :>> \n', hasPolicy);
// hasPolicy 确定是否存在授权规则 :>>
false
const hasNamedPolicy = await e.hasNamedPolicy('p', 'data2_admin', 'data2', 'read')
console.log('hasNamedPolicy 确定命名的授权规则是否存在 :>> \n', hasNamedPolicy);
// hasNamedPolicy 确定命名的授权规则是否存在 :>>
false
const hasGroupingPolicy = await e.hasGroupingPolicy('alice', 'data2_admin')
console.log('hasGroupingPolicy 确定是否存在角色继承规则 :>> \n', hasGroupingPolicy);
// hasGroupingPolicy 确定是否存在角色继承规则 :>>
false
const HasNamedGroupingPolicy = await e.hasNamedGroupingPolicy('g', 'alice', 'data2_admin')
console.log('HasNamedGroupingPolicy 确定是否存在命名角色继承规则:>> \n', HasNamedGroupingPolicy);
// HasNamedGroupingPolicy 确定是否存在命名角色继承规则:>>
false
// Save the policy back to DB.
await e.savePolicy();
console.log('end :>> ');
}
main()
.catch((e) => {
throw e
})
.finally(async () => {
await prisma.$disconnect()
})
allSubjects allNamedSubjects allNamedObjects allNamedActions Output error result
@Gabriel-403 @Zxilly @kingiw @nodece