acl - 如何为属于文件夹的角色和资源创建 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
解决方案
你没有描述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
我建议您阅读文档,谢谢
推荐阅读
- kubernetes - 对于 yq - 我们如何获取 kubernetes configmap 中的 data 参数
- excel - excel中的分组列不适用于最后一组
- python - 根据 Pandas 中的列合并两行
- r - Rstudio 停止在 iCloud Drive 上查找文件和文件夹
- swift - SwiftUI TabView 动画
- c++ - wxFilePickerCtrl 设置路径后未实现小部件
- python - 我想将 bs4 beautifulSoup 对象中的 HTML 实体(十六进制)保存到文件中
- azure-devops - AzDO ManualValidation 步骤在 YAML 管道中失败,没有解释原因
- javascript - VUE如何从方法中为变量赋值
- flutter - 颤振不活动捕手