亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Security hasRole() 用于未經身份驗證的用戶,考慮角色層次結構

Spring Security hasRole() 用于未經身份驗證的用戶,考慮角色層次結構

UYOU 2023-04-19 10:35:43
我的 Spring Boot 2 + Spring Security 應用程序中有一個角色層次結構:@Beanpublic RoleHierarchy roleHierarchy() {    var rh = new RoleHierarchyImpl();    rh.setHierarchy("ROLE_ADMIN > ROLE_USER and ...");    return rh;}現在我(作為管理員)想代表另一個用戶創建一個實體,但我應該檢查該用戶是否具有基于上述層次結構的特定權限。我知道可以為當前經過身份驗證的用戶調用 spring security hasRole() ,但就我而言,我想要授權的用戶未經過身份驗證?,F在,我可以檢查用戶是否具有該特定權限:public boolean hasAuthority(User user, String authority) {    return user.getAuthorities()            .stream()            .anyMatch(grantedAuthority -> grantedAuthority.getName().equals(authority));}但這樣一來,相當長的層次結構將被忽略。如果有任何幫助,我將不勝感激。
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

您可以使用角色層次結構

Collection<??extends?GrantedAuthority>?getReachableGrantedAuthorities(Collection<??extends?GrantedAuthority>?authorities)

返回所有可達權限的數組。

可達權限是直接分配的權限加上在角色層次結構中可以(傳遞地)從它們到達的所有權限。

示例:角色層次結構:ROLE_A > ROLE_B 和 ROLE_B > ROLE_C。
直接分配的權限:ROLE_A。
可達權限:ROLE_A、ROLE_B、ROLE_C。

參數:

authorities- 直接指定的權限列表。

退貨:

給定指定權限的所有可訪問權限的列表。

您修改后的代碼:

public?boolean?hasAuthority(User?user,?String?authority)?{?
???return?roleHierarchy()
????????.getReachableGrantedAuthorities(user.getAuthorities())
????????.stream()
????????.anyMatch(grantedAuthority?->?grantedAuthority.getName().equals(authority));
}


查看完整回答
反對 回復 2023-04-19
  • 1 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號