Php 如何解决具有多个角色的用户的Zend_Acl权限冲突?

Php 如何解决具有多个角色的用户的Zend_Acl权限冲突?,php,zend-framework,acl,zend-acl,rbac,Php,Zend Framework,Acl,Zend Acl,Rbac,我正在尝试使用Zend_Acl创建RBAC。我的问题是,我希望用户能够拥有多个角色,但我不确定如何解决不同角色之间的权限冲突?在同时存在允许和拒绝的情况下,允许是否应始终覆盖拒绝?一如既往,非常感谢您抽出时间来检查我的问题。干杯 两种变体都不错,问题是您更喜欢什么?“拒绝”优先于“允许”将导致系统中单个“拒绝”许可将剥夺权利,不管其他人怎么说,反之亦然-将“允许”作为更高的优先级将导致单个“允许”将授予许可,尽管有许多“拒绝”。所以问题是-你的系统应该有多严格?两种变体都可以,问题是你更喜欢什么

我正在尝试使用Zend_Acl创建RBAC。我的问题是,我希望用户能够拥有多个角色,但我不确定如何解决不同角色之间的权限冲突?在同时存在允许和拒绝的情况下,允许是否应始终覆盖拒绝?一如既往,非常感谢您抽出时间来检查我的问题。干杯

两种变体都不错,问题是您更喜欢什么?“拒绝”优先于“允许”将导致系统中单个“拒绝”许可将剥夺权利,不管其他人怎么说,反之亦然-将“允许”作为更高的优先级将导致单个“允许”将授予许可,尽管有许多“拒绝”。所以问题是-你的系统应该有多严格?

两种变体都可以,问题是你更喜欢什么?“拒绝”优先于“允许”将导致系统中单个“拒绝”许可将剥夺权利,不管其他人怎么说,反之亦然-将“允许”作为更高的优先级将导致单个“允许”将授予许可,尽管有许多“拒绝”。所以问题是-您的系统应该有多严格?

您应该在实现中添加角色优先级。如果在多个角色中存在确切的资源/特权对,则您将以最高优先级对其进行处理。如果没有一个角色具有精确匹配,则选择优先级更高的角色返回的内容

另一种方法是定义用户角色,如user123

$acl->addRole('user123',array('admin','banked')


我不知道具有多个父角色的角色的行为,所以请自己检查一下

您应该在实现中添加角色优先级。如果在多个角色中存在确切的资源/特权对,则您将以最高优先级对其进行处理。如果没有一个角色具有精确匹配,则选择优先级更高的角色返回的内容

另一种方法是定义用户角色,如user123

$acl->addRole('user123',array('admin','banked')


我不知道多个家长角色的角色行为,所以自己去看看吧

把它想象成你的家

  • 否认某人
  • 拒绝任何来自俄罗斯的人
  • 允许|家庭成员
  • 允许|朋友
假设你对俄罗斯人有不好的感觉。你会认为,仅仅因为你的好朋友是俄罗斯人,你就应该拒绝他进入你的家吗?不,他已经证明了他的一些品质,这给了他“朋友”的地位。allow应该覆盖deny IMO


不要冒犯俄罗斯人:把它想象成你的家

  • 否认某人
  • 拒绝任何来自俄罗斯的人
  • 允许|家庭成员
  • 允许|朋友
假设你对俄罗斯人有不好的感觉。你会认为,仅仅因为你的好朋友是俄罗斯人,你就应该拒绝他进入你的家吗?不,他已经证明了他的一些品质,这给了他“朋友”的地位。allow应该覆盖deny IMO


无意冒犯俄罗斯人:p

安全最佳实践表明,当出现冲突问题时,应拒绝

也就是说,根据实际经验,我以以下方式构建安全性(涉及RBAC时):

每个用户都有一套权限;用户权限取代了组权限 每个用户都可以拥有一个或多个组权限 每个组都有一个应用的优先级;通常,admin应用于上次应用权限的位置 我很少将多组应用于多人;大多数有权申请权限的人都不能这样做,除了主管理员(我创建了一个新组)。 我非常谨慎地使用否定(拒绝权限的组)。 在向某人应用组权限时,我会让系统检查冲突并通知应用组权限的人。 除了标准的RBAC角色外,我还有一个标志:授予查看他人、授予编辑他人等


此外,使用许多其他机制,如sha256会话令牌,使用数据库表临时检查空闲会话+重播攻击,要求此人的ip地址保持不变,等等。

安全最佳实践表明,当出现冲突问题时,会出现拒绝

也就是说,根据实际经验,我以以下方式构建安全性(涉及RBAC时):

每个用户都有一套权限;用户权限取代了组权限 每个用户都可以拥有一个或多个组权限 每个组都有一个应用的优先级;通常,admin应用于上次应用权限的位置 我很少将多组应用于多人;大多数有权申请权限的人都不能这样做,除了主管理员(我创建了一个新组)。 我非常谨慎地使用否定(拒绝权限的组)。 在向某人应用组权限时,我会让系统检查冲突并通知应用组权限的人。 除了标准的RBAC角色外,我还有一个标志:授予查看他人、授予编辑他人等


此外,使用许多其他机制,如sha256会话令牌,使用数据库表临时检查空闲会话+重播攻击,要求此人的ip地址保持不变,等等。

thx用于回答Laimoncijus,对于我的系统,我认为让“allow”属性具有更高的优先级更有意义,但我想知道这是否会导致问题,特别是在特定角色从父角色继承“允许”属性的情况下,尝试为其设置拒绝权限时。这可能会使管理员更难知道如何实际将权限设置为“拒绝”。@blacktie24我想在这种情况下,拒绝权限并没有真正的意义,因为如果在任何地方都有一个允许,那么拒绝就会被忽略。。。所以我想你需要在更高的优先级上拒绝,这样管理员可以轻松添加拒绝,这将限制用户直接回答La