Lui*_*mim 13 acl authorization
我们的应用程序使用多种方式来授权访问给定资源.虽然它有效,但它很混乱......好吧,它似乎不对.
我们有明确定义的角色,每个角色都可以访问一组资源,不同的角色可以访问相同的资源.
截至目前,资源只是在数据库表中映射的MVC动作module,controller和action.
这似乎没问题,但每次我需要添加一个新的控制器/动作时,我必须将此资源映射到数据库表.
除了基于角色的授权之外,用户还可以或多或少地访问另一个角色的资源子集.例如.:
RoleA:资源一个,b,c ^,d
RoleB:资源X,ÿ,ž
ROLEC:资源1,2,3
用户1:具有RoleA但需要访问资源ÿ
用户2:具有RoleB和ROLEC但不具有访问资源ž
这被实现为一个user_resources表,其中包含用户有权访问或被拒绝的其他资源的条目(由标志指示).
我可以通过定制访问创建不同的角色,将角色视为一组权限,但这会导致角色爆炸.
如果这还不够,某些操作只能在模型处于某种状态时执行(每个模型都知道什么时候可以完成).例如:只有当用户有权访问编辑资源(通过步骤#1或#2)并且Order可以编辑对象时,才能编辑订单.
Anoter示例:用户可以访问a,Customer如果他有权访问/customer/view资源,并且他拥有该客户(他是该客户的联系信息).
角色,角色组或个人用户可以根据其状态查看有关模型的更多或更少信息.
如何在不放弃授予或限制资源访问权限的情况下简化此授权过程?
我在这里缺少任何模式来统一所有这些授权在一个地方?
Lui*_*mim 11
很长一段时间后,我终于找到了满足我所有要求的答案:http: //lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks /.
他的解决方案是将所有内容都视为一项活动,执行/调用的权限/为角色提供的任何活动以及用户可以拥有多个角色.
这种方法的亮点在于,对活动本身进行了权限检查,而不是对角色进行了权限检查.
koe*_*oen 10
我已经使用规范模式实现了访问控制,我发现它直接适用于此.一个核心方法是isSatisfiedBy.如果z满足,则允许X执行y.例如,如果"具有管理员角色"满足,则允许用户查看"管理页面".看看如何isSatisfiedBy非常通用(例如'是id为324的用户,'已经登录30分钟','是foo组的成员',......).然后规则变成以下一般形式:
allow X to do Y if X satisfies Z
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6895 次 |
| 最近记录: |