在我们的应用程序中,我们计划使用RoleVoter
机制,但我们要删除ROLE_
前缀,因为我们正在实施的安全性比基于任务更多< em>基于角色。
从技术上讲,实施没有问题,但我在文档中发现using the RoleVoter
with an empty prefix should be discouraged。
我想知道为什么?
AFAICS,唯一的问题是,如果没有前缀,RoleVoter
将参与其不适合的决策(例如IS_AUTHENTICATED_FULLY
,IS_AUTHENTICATED_REMEMBERED
,...并且可能会返回拒绝访问而不是弃权。
请问您确认这是唯一一个空前缀的问题吗?
提前致谢 微米。
答案 0 :(得分:15)
是。如果您使用多个选民或自定义选民,那么他们需要某种方式知道他们应该使用哪些属性。例如,如果您有DayOfTheWeekVoter
并且您使用属性ROLE_USER,DAY_MONDAY
定义了资源,那么RoleVoter
可能会投票授予访问权限,因为用户具有“User”角色,但{ {1}}可能拒绝访问,因为它不是星期一。
如果您没有使用前缀配置DayOfTheWeekVoter
,那么它将检查用户是否具有分配给他们的名为“DAY_MONDAY”的权限,因此这种情况不起作用。
如果您只对角色感兴趣,那么您可以不使用前缀,或者您可以使用不使用RoleVoter
的表达式(例如hasRole('user')
)。