所以,我已经对RBAC和ACL做了一些研究,但所有的例子都非常“一维”,并不适合我的需要(至少我认为)。
所以,我所拥有的国家有总裁, vicepresi , Coach1 等。< / p>
目前我有14个国家,每个角色都不能拥有不同国家的权利。
此外,我还有俱乐部,其中包含经理,教练,玩家等。
这里最好的解决方案是什么?
编辑:用户既可以是一个国家的总裁,又可以成为另一个国家的教练,同时也可以成为俱乐部的球员,等等。
答案 0 :(得分:1)
你的问题并不完全清楚,但从我能理解的情况来看,一个人可以在一个国家担任副总统,但在另一个国家却没有人,这就是困扰你的人 - 你如何模仿这个? 如果我得到了正确的问题,那么在RBAC实现中,我使用(用PHP编写的Yii框架)就是这个叫做“业务规则”的东西。业务规则是一个返回true或false的PHP代码片段,可以为特定角色附加或定义(对于一个简单的示例),这意味着每次检查一个人是否“具有此角色”时业务规则,它不足以让这个人担任这个角色。如果商业规则附加到此角色,则会运行该规则,并且该代码段(布尔值)的答案将确定该人是否“确实”具有此角色。 换句话说,你在这里获得了额外的灵活性,而不是:
一个人有“副总统”的角色吗? - &gt; 如果他有这个角色,他就是每个国家的副总裁(!......)。
你可以像这样进行更精细的调整:
一个人是否有国家A的副总裁角色? (国家A作为参数传递给RBAC层,RBAC层已经有'人'数据结构 - &gt; RBAC层运行商业规则片段。您编写的代码,检查该特定用户与该特定国家/地区的亲密关系并返回布尔值,该布尔值确定该用户是否为国家A的副总裁。
剩下的就是在应用程序中插入逻辑,在你的数据库(选择)中强制执行每个国家1位副总裁的唯一性,然后你就完成了!
希望有所帮助。