Php 高级基于角色的访问控制

Php 高级基于角色的访问控制,php,laravel,laravel-4,rbac,Php,Laravel,Laravel 4,Rbac,所以,我对RBAC和ACL做了一些研究,但所有的例子都是非常“一维”的,不太适合我的需要(至少我认为是这样) 所以,我看到的是有总统、副总统、教练等的国家 目前我有14个国家,每个角色不能在不同的国家拥有权利 此外,我还有俱乐部,有经理、教练、球员等 最好的解决方案是什么 编辑:一个用户既可以是一个国家的总统,也可以是另一个国家的教练,同时又是一个俱乐部的球员,等等。你的问题并不完全清楚,但据我所知,一个人可以是一个国家的副总统,但在另一个国家却不是任何人,这让你感到困惑-你如何对此进行建模?

所以,我对RBAC和ACL做了一些研究,但所有的例子都是非常“一维”的,不太适合我的需要(至少我认为是这样)

所以,我看到的是有总统、副总统、教练等的国家

目前我有14个国家,每个角色不能在不同的国家拥有权利

此外,我还有俱乐部,有经理、教练、球员等

最好的解决方案是什么


编辑:一个用户既可以是一个国家的总统,也可以是另一个国家的教练,同时又是一个俱乐部的球员,等等。

你的问题并不完全清楚,但据我所知,一个人可以是一个国家的副总统,但在另一个国家却不是任何人,这让你感到困惑-你如何对此进行建模? 如果我答对了这个问题,那么在我使用的RBAC实现tnat(用PHP编写的Yii框架)中,有一个东西叫做“业务规则””。业务规则是返回true或false的PHP代码片段,可以为特定角色附加或定义(举一个简单的例子),这意味着每次检查一个人是否“拥有此角色”业务规则时,该人不足以附加此角色。如果将业务规则附加到此角色,则会运行该规则,并且来自该代码段(布尔值)的答案将确定此人是否“真的”具有此角色。 换句话说,您在这里获得了额外的灵活性,而不是:

一个人是否有“副总裁”的角色->如果他担任这一职务,他就是每个国家的副总统(!…)

您可以进行更精细的检查,如下所示:

一个人在一个国家有副总统的角色吗?(国家A将作为参数传递给RBAC层,RBAC层已经拥有“person”数据结构->RBAC层运行业务规则片段。您编写的代码检查该特定用户与该特定国家的关联性,并返回布尔值,确定该用户是否为国家A的副总统

剩下的就是在应用程序中插入逻辑,在DB(选择)中每个国家强制执行一个副总裁的唯一性,您就完成了


希望有帮助。

(请看我的编辑。)这是否意味着我必须将单个角色行乘以我拥有多少个国家,再加上俱乐部的相同行数?请阅读您的评论。我不确定我是否完全理解。您的意思是,一个用户可以在一个国家拥有一个角色,而在另一个国家拥有另一个角色?如果我完全理解您的意思,那么我不确定RBAC是否是您的选择。也许是定制的co“回答”客户角色分配相关问题的组件将是最好的。我不确定。无论如何,感谢您的回答,它让我对RBAC的功能有了更多的了解:)我将在用户表中拥有一个字符串以及他的所有权限。