我正在尝试创建一个卡辛 RBAC + ACL模型。业务要求如下:
我们有一个组织,在组织中您可以创建文件夹。有一些特殊的文件夹,比如Workspace文件夹。基本上,文件夹是一种限制对某些资源的访问的方法,这些资源是您“放置”在这些文件夹中的资源。如果您无法访问某个文件夹,则除非文件夹所有者显式重写,否则您可以立即访问该文件夹的所有子文件夹。示例:

现在,我们也有了特性和权限。角色是一组权限。特征示例:用户、计算机、脚本。权限示例:编辑用户、删除用户、发布脚本。
所以现在,我试图把这一切结合起来,想出正确的Casbin模型。根据我对的理解,我需要定义角色及其权限、文件夹层次结构、哪些用户可以访问每个文件夹、用户拥有哪些角色以及文件夹中有哪些资源。这样,当请求询问用户"John“是否可以发布脚本"Untitled”时,模型将查看"Untitled“是哪个文件夹,然后查看"John”是否具有对该文件夹的权限,以及是否具有发布脚本的权限(如果"John“具有"bot developer”角色)。
角色及其权限
p, role:workspaceAdmin, feature:user, edit
p, role:workspaceAdmin, feature:user, delete
p, role:workspaceAdmin, feature:workspace, edit
p, role:botDeveloper, feature:script, publish因此,工作区管理员角色可以编辑或删除用户,也可以编辑工作区。bot开发人员角色可以发布脚本。
文件夹层次结构
g2, folder:watson, script:untitled
g2, folder:xpto, folder:doc
g2, folder:xpto, folder:infra
g2, folder:xpto, folder:watson
g2, folder:watson, folder:projectX
g2, folder:watson, folder:projectY
g2, folder:infra, folder:project66
g2, folder:doc, folder:marcela用户可以访问每个文件夹的
g, user:joba, folder:watson用户具有的角色
g, user:joba, role:botDeveloper文件夹中有哪些资源
g2, folder:watson, script:untitled在此之后,以下请求返回false,其中我希望是true:user:joba, script:untitled, publish。因为用户"joba“拥有”发布“”功能“”脚本“的权限,可以访问文件夹"watson",并且”脚本“名为"untitled”属于该文件夹。
模型
[request_definition]
r = sub, obj, action
[policy_definition]
p = sub, obj, action
[role_definition]
g = _, _
g2 = _, _
[policy_effect]
e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
[matchers]
m = g(r.sub, p.sub) && g2(r.obj, p.obj) && r.act == p.act策略
p, role:workspaceAdmin, feature:user, edit
p, role:workspaceAdmin, feature:user, delete
p, role:workspaceAdmin, feature:workspace, edit
p, role:botDeveloper, feature:script, publish
g2, folder:watson, script:untitled
g2, folder:xpto, folder:doc
g2, folder:xpto, folder:infra
g2, folder:xpto, folder:watson
g2, folder:watson, folder:projectX
g2, folder:watson, folder:projectY
g2, folder:infra, folder:project66
g2, folder:doc, folder:marcela
g, user:joba, folder:watson
g2, folder:watson, script:untitled请求
user:joba, script:untitled, publish发布于 2021-02-02 06:56:15
你没有描述user与role,script & feature之间的关系
g, user:joba, role:botDeveloper
g2, folder:watson, script:untitled
g2, script:untitled, feature:script模型文件action应该是act,或者将r.act和p.act转换为r.action和p.action。
我建议你读文档,谢谢
https://stackoverflow.com/questions/65982718
复制相似问题