首页 > 解决方案 > 如何为属于文件夹的角色和资源创建 Casbin 模型和策略?

问题描述

我正在尝试创建一个Casbin RBAC + ACL 模型。业务需求如下:

我们有一个组织,您可以在组织内创建文件夹。有像 Workspace 文件夹这样的特殊文件夹。基本上,文件夹是一种限制对某些资源的访问的方法,这些资源是您“放置”在这些文件夹中的资源。如果您有权访问某个文件夹,则您可以立即访问其所有子项,除非文件夹所有者明确覆盖。例子:

在此处输入图像描述

现在,我们还拥有功能和权限。角色是一组权限。功能示例:用户、计算机、脚本。权限示例:编辑用户、删除用户、发布脚本。

所以现在,我正试图将这一切结合起来,以提出正确的 Casbin 模型。据我了解,我需要定义角色及其权限、文件夹层次结构、哪些用户可以访问每个文件夹、用户拥有哪些角色以及文件夹内有哪些资源。这样,当请求询问用户“John”是否可以发布脚本“Untitled”时,模型会查看“Untitled”在哪个文件夹中,然后查看“John”是否具有该文件夹的权限以及是否具有发布脚本的权限(如果“John”具有“机器人开发者”角色)。

角色及其权限

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

用户具有哪些角色

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

标签: aclrbaccasbin

解决方案


你没有描述user& role, script&之间的关系feature

g, user:joba, role:botDeveloper
g2, folder:watson, script:untitled

g2, script:untitled, feature:script

并且模型文件action应该是act或更改为r.actp.actr.actionp.action

我建议您阅读文档,谢谢


推荐阅读