10

在我们的应用程序中,我们计划使用该RoleVoter机制,但我们想删除ROLE_前缀,因为我们正在实施的安全性更多的是基于任务而不是基于角色

从技术上讲,实现没有问题,但我在文档中发现不鼓励使用RoleVoter带有空前缀的

我想知道为什么?

AFAICS,唯一的问题是,如果没有前缀,RoleVoter将参与它不应该参与的决策(例如IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, ...)并且可能会返回拒绝访问而不是弃权。

您能否确认这是空前缀的唯一问题?

在此先感谢 M。

4

1 回答 1

15

是的。如果您使用多个选民或自定义选民,那么他们需要某种方式知道他们应该使用哪些属性。例如,如果您有一个DayOfTheWeekVoter并且您有一个定义了属性的资源,ROLE_USER,DAY_MONDAYRoleVoter可能会投票授予访问权限,因为用户具有“用户”角色,但DayOfTheWeekVoter可能会拒绝访问,因为它不是星期一。

如果您没有配置RoleVoter前缀,那么它将检查用户是否具有分配给他们的名为“DAY_MONDAY”的权限,因此这种情况将不起作用。

hasRole('user')如果您只对角色感兴趣,那么您可以不使用前缀,或者您可以使用不使用 . 的表达式(例如) RoleVoter

于 2012-07-18T19:42:22.177 回答