问题描述
我正在尝试实施 casbin 身份验证,以便用户只能获取自己的用户名,但将其应用于组。示例:
/users/get/alice
可由用户名 alice
/users/get/john50
可由用户名 john50
alice
和 john50
不能调用对方的端点。
但是,我希望能够将其应用于组内的所有用户,因此理想情况下我希望我的策略如下所示:
p,staff-all,/users/get/:userid,GET,allow
这是我可以在政策和模型中实现的东西还是我需要在代码中实现的东西?这听起来像是一个比策略和模型中更复杂的用例。
我目前的模型:
[request_deFinition]
r = sub,obj,act
[policy_deFinition]
p = sub,act,eft
[role_deFinition]
g = _,_
[policy_effect]
e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
[matchers]
m = g(r.sub,p.sub) && keyMatch2(r.obj,p.obj) && regexMatch(r.act,p.act)
我在 Casbin examples 中看到过类似的东西,但这些似乎给出了一个特定的用户名,而不是通过群组完成
解决方法
在此处查看 keyGet()
函数:https://casbin.org/docs/en/function
匹配器将类似于:
m = (r.sub == keyGet(r.obj,p.obj)) && <other_part>