首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我想同时使用与资源角色匹配的restful,那么如何设置casbin conf?

如果我想同时使用与资源角色匹配的restful,那么如何设置casbin conf?
EN

Stack Overflow用户
提问于 2020-06-21 14:03:18
回答 2查看 737关注 0票数 0

我用带有rabc的容器和资源模型,这是我的产品:

代码语言:javascript
复制
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _
g2 = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && g2(r.obj, p.obj) &&(r.act == p.act

这是一项政策:

代码语言:javascript
复制
p, data_group_admin, data_group, write

g, alice, data_group_admin
g2, /api/:id, data_group

这是请求:

代码语言:javascript
复制
alice, /api/1, read
alice, /api/2, write

结果是假,假实际上,我期望结果是真,真,我想资源可以支持restful格式,如何设置conf?

EN

回答 2

Stack Overflow用户

发布于 2020-06-21 16:12:45

您可以使用AddMatchingFunc使默认角色管理器知道如何传播角色链接,因为在默认情况下,它准确地比较角色名称。

示例代码可能如下所示

代码语言:javascript
复制
e.GetRoleManager().(*defaultrolemanager.RoleManager).AddMatchingFunc('matcher', util.KeyMatch)

有关更多信息,您可以看到https://github.com/casbin/casbin/blob/master/rbac/default-role-manager/role_manager.go#L163

更新后,添加示例代码

代码语言:javascript
复制
package main

import (
    "github.com/casbin/casbin/v2"
    defaultrolemanager "github.com/casbin/casbin/v2/rbac/default-role-manager"
    "github.com/casbin/casbin/v2/util"
)

func main() {
    e, _ := casbin.NewEnforcer("./model.conf", "./policy.csv")

    e.GetRoleManager().(*defaultrolemanager.RoleManager).AddMatchingFunc("key_match", util.KeyMatch2)
    res1, _ := e.Enforce("alice", "/api/1", "write") // true
    res2, _ := e.Enforce("alice", "/api/2", "read")  // false
}

这将是正确的,因为alice属于data_group_admin,/api/1属于data_group,data_group_admin可以编写data_group

因为您没有定义读取策略,所以第二个强制执行将返回false。

票数 1
EN

Stack Overflow用户

发布于 2021-02-03 03:44:10

照我的想法。

代码语言:javascript
复制
g2, /api/:id, data_group

g2需要两个子,而不是obj和sub。

我的意思是:如果你想要爱丽丝可以访问你需要的/api/1

代码语言:javascript
复制
p: alice, /api/1, read
p: alice, /api/2, write

或者:

代码语言:javascript
复制
p: data_group_admin, /api/1, read
p: data_group_admin, /api/2, write
g: alice, data_group_admin

摘要:区分subobjrpg

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

https://stackoverflow.com/questions/62499629

复制
相关文章

相似问题

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