我正在尝试实现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, obj, 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实例中看到了类似的东西,但它们似乎给出了一个特定的用户名,而不是通过组实现的。
发布于 2021-02-04 15:52:12
参见此处的keyGet()函数:https://casbin.org/docs/en/function
比赛将会是这样的:
m = (r.sub == keyGet(r.obj, p.obj)) && <other_part>https://stackoverflow.com/questions/66046585
复制相似问题