首先用户可以同时拥有多个角色,并且角色具有作用域。例如,一个用户具有三个角色:/scopeA/editor、/scopeA/programmer、/scopeB/editor
并且 /scopeA/editor 可以访问资源 /scopeA/post /scopeA/programmer 可以访问资源 /scopeA/bug
/scopeB/editor has access to resource /scopeB/post
所以问题来了:
我如何声明一个策略说:如果角色包中有一个名为“/XX/editor”的角色,那么当“XX == YY”时,相应的用户可以访问“/YY/post”
我在这里找到了一个类似的问题,我提出了一个解决问题的方法,但是当涉及到多个角色(角色属性值是一个包)时,我的答案是不对的。因为角色属性值是一个包,我不能只获取角色属性值的前两个斜杠之间的部分,然后与资源属性进行比较,
然后我试图找到一个高阶包函数来做到这一点,“urn:oasis:names:tc:xacml:3.0:function:any-of”函数可以做到这一点,但是第一个“函数参数”呢任何功能?
这是我所做的:any-of 函数的第一个参数是“string-equal”,第二个参数是用于获取资源 ID 的前两个斜杠之间的部分的函数,第三个参数是主题的属性值是一个袋子。
所以我需要做的就是定义一个函数来获取前两个斜线之间的部分,对吗?
有没有更好的方法来做我想做的事?有什么不清楚的请告诉我,谢谢~~