Oop 在RBAC中向用户授予特殊权限
我在企业软件中使用基于角色的访问控制进行授权。我创建了三个类:Oop 在RBAC中向用户授予特殊权限,oop,security,design-patterns,architecture,roles,Oop,Security,Design Patterns,Architecture,Roles,我在企业软件中使用基于角色的访问控制进行授权。我创建了三个类:User、Role和Privilege。用户与角色有多对多关系,角色与权限有多对多关系。客户的要求之一是向特定用户添加特权。例如,用户u有一个名为r的角色,据此,u只能调用foo服务。但是我想添加特权p,这样他也可以调用bar服务,即使他的角色不允许他调用bar。 我想到的唯一解决方案是,用户和特权也有多对多的关系。但是我认为这不是一个好主意。如果在用户和特权之间创建多对多关系不利于您正在创建的系统,那么您可以为特权创建一个一次性角色
User
、Role
和Privilege
。用户与角色有多对多关系,角色与权限有多对多关系。客户的要求之一是向特定用户添加特权。例如,用户u
有一个名为r
的角色,据此,u
只能调用foo
服务。但是我想添加特权p
,这样他也可以调用bar
服务,即使他的角色不允许他调用bar
。
我想到的唯一解决方案是,用户和特权也有多对多的关系。但是我认为这不是一个好主意。如果在用户和特权之间创建多对多关系不利于您正在创建的系统,那么您可以为特权创建一个一次性角色。例如,如果用户
u
通过rn
拥有角色r0
,这些角色通过pn
拥有特权p0
,其中没有一个具有访问资源的权限,res1
,那么您可以创建一个特殊角色rs
,允许访问res1
并将该角色分配给u
因此,创建特权的算法是:
p
r
,并为其分配p
r
分配给用户u
u
现在将能够通过pn
访问p0
允许的所有资源,以及步骤(1)中创建的p
可访问的资源
如果许多用户需要这些特权(即,许多用户需要对同一资源进行特殊访问),则可以重用该角色。例如,根据需要,可以为每个所需资源创建一个新角色(上述算法中的步骤(2)),并且可以将该角色分配给多个用户。如果不需要重用,则可以在每次需要特权时创建新角色和特权。后一种情况(不可重复使用)的优点是比前一种更简单。谢谢,这似乎是个好主意。我还有一个要求,不知你能否帮我。有时,客户需要为用户禁用某个特权,即使他的角色允许他访问该特权。如何使用当前结构实现此目的?@narimanesmaielyford您可以向用户添加禁用权限列表。遍历角色和权限树后,将删除该用户的禁用列表中的权限,并保留当前为该用户启用的权限。