2017-08-09 117 views
1

这是什么意思?hasPermission spring安全

@PreAuthorize("hasPermission('DEVICE', {'DELETE','CREATE'})") 

是否检查Device对象是否具有DELETE和CREATE两者的权限或其中的任何一个?

+3

这取决于您的PermissionEvaluator – Vitolds

回答

2

正如评论中所说,这取决于你拥有哪个PermissionEvaluator。如果您使用内置的ACL系统,则将授予DefaultPermissionGrantingStrategyjavadoc说:

该方法将按指定的顺序遍历每个permission s。对于每次迭代,将会考虑所有sid,再次按照它们的呈现顺序。然后搜索将直接匹配permission:sid组合的第一个AccessControlEntry对象。当找到第一个完整匹配时,该ACE的授予或拒绝标志将占上风。如果ACE指定授予访问权限,该方法将返回true。如果ACE指定拒绝访问,则循环将停止并且将执行下一个迭代。

(SIDS =安全标识,用户的校长和主管部门)

在实践中,这意味着只有一个权限的需要方法返回true。