角色与ACL在春天

时间:2014-08-13 18:33:48

标签: java spring acl roles

问题是我应该使用具有对象范围的角色还是仅使用ACL

以下是用例,假设我希望用户拥有对公司A的CRUD权限,但只对公司B拥有读取权限。

现在我可以通过两种方式实现这一点。

方法#1)

创建两个角色
1)ROLE_ADMIN:具有此角色的用户将拥有与任何公司相关的所有CRUD权限。

2)ROLE_SUPPORT:此角色的用户仅具有类(公司)级别的读取权限e

现在我可以说,

用户A - >有ROLE_ADMIN - 在公司A
用户A - >有ROLE_SUPPPORT - 在CompanyB。
注意:这里我没有对该对象赋予任何权限。

方法#2) 只有一个角色[管理员],我可以说

用户A - >拥有CRUD权限 - 在CompanyA
用户A - >拥有R [读取]权限 - 在CompanyB上

我不确定哪种方法是首选的,为什么。在方法#2中,我在Role中看不到任何值,因为无论如何都在对象上定义了权限。我认为唯一有意义的是CREATE。如果他允许创建因为此时对象不存在,用户将不会预先知道。 在方法2中,我不需要任何多个角色。但听起来不对。

所以现在为什么我应该使用方法#2,当我可以使用方法1做同样的事情。

希望听到你的消息。

感谢 保罗

1 个答案:

答案 0 :(得分:3)

角色和ACL有不同的用途。

角色是限制某些资源,例如,您可能会说UserA可以访问公司。

使用ACL,您可以说UserA可以访问CompanyA,但不能访问公司内的CompanyB。

因此,角色的粒度小于ACL,但它们可以协同工作。

回到你的情况,你需要ACL来限制UserA拥有Read for CompanyA和Write for CompanyB,但是角色说UserA可以访问公司类型的资源。 这也将解决有关创建的其他问题:因为UserA可以访问公司,他可以创建一个新的CompanyC,根据定义,ACL Write访问将与CompanyC相关联(因为他是创建者)。