2017-08-09 128 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。