php – 复杂的Righty系统:ACL,RBAC等等什么?

前端之家收集整理的这篇文章主要介绍了php – 复杂的Righty系统:ACL,RBAC等等什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们目前正在开发一个项目管理软件.我们无法确定实施安全性的正确方法.我们已经查看了ACL和RBAC,并且已经非常确定我们至少需要两者的组合才能出于特定原因.但是有两个问题在这两个世界都没有很好的解决方案.让我解释:

假设您有以下实体:

>具有不同角色的用户,即

>项目负责人
>工人
>管理员

>项目
>指定用户
>项目中的任务

现在应该表达以下规则:
具有Role Worker的用户只能查看与分配给他的项目相关的任务.

这导致仅允许用户查看整个列表中的一些任务.

我们将使用RBAC为Roles提供实际读取任务的权限.但由于涉及特定实体,因此不适用该条件.可以使用ACL,但我们担心保持ACL条目符合要求的噩梦(用户可以更改,角色可以更改,可以引入新任务,必须获得正确的条目,这同样复杂).

当然,在查看特定项目时可能会有特定的查询(WHERE project_id = 123),但这对“查看所有当前任务”没有帮助,基本上每个任务都可以考虑显示,但ACL会有检查每一个委托.

我如何确保诸如“获取当前用户可以看到的前25个任务”之类的内容,而无需从数据库加载所有任务,然后根据ACL进行过滤,即处理分页.

您需要超越ACL和RBAC并考虑基于属性的访问控制(ABAC – 请参阅NIST的指南 here). Gartner称这个空间为“外部化授权管理”.

使用ABAC,您可以轻松地表达任何规则,不仅考虑用户是谁,还考虑用户想要做的事情,地点,时间,原因和方式.使用属性定义授权,您可以使用XACML来实施策略. XACML是OASIS标准(就像SAML一样).

使用XACML,您可以获得一个API,您可以在其中提出问题,例如:Alice可以查看此记录吗?但在你的情况下,这还不够,因为你想从数据库中过滤掉记录.而且,正如您所描述的那样,您希望查询从一开始就是正确的,而不是来回到数据库,直到您拥有正确数量的授权记录.这是XACML变得特别有趣的地方,因为它是技术中立的.您可以将XACML应用于Java,C#和其他语言,例如Python但也将XACML应用于不同的层(表示,API和…数据库).可以以反向查询方式查询XACML以生成sql语句,然后可以使用该语句在后端数据库查询相关记录:

> Alice可以查看哪些记录?
> Alice可以在加利福尼亚查看记录,产生“SELECT * FROM records WHERE location =’CA’”

HTH

原文链接:https://www.f2er.com/php/444956.html

猜你在找的PHP相关文章