首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为属于文件夹的角色和资源创建Casbin模型和策略?

如何为属于文件夹的角色和资源创建Casbin模型和策略?
EN

Stack Overflow用户
提问于 2021-01-31 18:22:56
回答 1查看 1K关注 0票数 0

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

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

现在,我们也有了特性和权限。角色是一组权限。特征示例:用户、计算机、脚本。权限示例:编辑用户、删除用户、发布脚本。

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

角色及其权限

代码语言:javascript
复制
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开发人员角色可以发布脚本。

文件夹层次结构

代码语言:javascript
复制
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

用户可以访问每个文件夹的

代码语言:javascript
复制
g, user:joba, folder:watson

用户具有的角色

代码语言:javascript
复制
g, user:joba, role:botDeveloper

文件夹中有哪些资源

代码语言:javascript
复制
g2, folder:watson, script:untitled

在此之后,以下请求返回false,其中我希望是trueuser:joba, script:untitled, publish。因为用户"joba“拥有”发布“”功能“”脚本“的权限,可以访问文件夹"watson",并且”脚本“名为"untitled”属于该文件夹。

模型

代码语言:javascript
复制
[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

策略

代码语言:javascript
复制
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

请求

代码语言:javascript
复制
user:joba, script:untitled, publish
EN

回答 1

Stack Overflow用户

发布于 2021-02-02 06:56:15

你没有描述userrolescript & feature之间的关系

代码语言:javascript
复制
g, user:joba, role:botDeveloper
g2, folder:watson, script:untitled

g2, script:untitled, feature:script

模型文件action应该是act,或者将r.actp.act转换为r.actionp.action

我建议你读文档,谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65982718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档