2013-08-30 103 views
0

我有Autorization的自定義模型,我想帶彈簧的安全表示:角色和權限自定義模型

我有角色和權限的concpt:

@Entity 
public class User 
............... 
@ManyToMany 
@Column 
private Set<Role> roles; 


@ManyToMany 
@Column 
private Set<Permission> permissions; 
    } 

在我自己的UserDetailsS​​ervice我有一個乾淨的方式來加載的角色,但我on't找到任何方式和與之相關的權限,彈簧安全的任何componenent:

public class BELUserDetailService implements UserDetailsService { 

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
User connectedUser = userRepositoy.findUserByUsername(username); 

    Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>(); 
    for (Role r :connectedUser.getRoles()) { 
     authorities.add(new SimpleGrantedAuthority(r.getRoleAWB().name())); 
    } 


    BELUserDetails belUserDetails = new BELUserDetails(connectedUser.getIdUser(), authorities); 
..... 
.... 
    } 

}

我的角色是:

ADMIN 普通用戶 交易USER

我的權限是: VALIDATE_TRANSATION INIT_TRANSACTION

和功能的使用情況是,如果你想驗證你的交易擁有ROLE TRANSACTION USER和權限VALIDATE_TRANSACTION。

hasRole("ROLE_TRANSACTION_USER") and hasPermission("VALIDATE_TRANSACTION") 

另一個重要的情況是,我希望在以後的使用PermissionEvaluator嘗試,如果用戶有角色「ROLE_TRANSACTION_USER」和許可VALIDATE_TRANSACTION驗證交易時放一些限制,他還必須有Amountlimit更大比交易量和這個功能是非常酷與PermissionEvaluator

這就是爲什麼我需要同時實現了角色和權限概念

如何,我將我的許可添加到彈簧安全的標準流程。

在此先感謝。

+0

您能否顯示一些權限示例? –

+0

我使用角色和權限的一些示例更新了帖子 – Nabil

+0

另一種情況是,如果用戶具有角色「ROLE_TRANSACTION_USER」和權限VALIDATE_TRANSACTION,我希望將來使用PermissionEvaluator在嘗試驗證事務時放置一些限制,他還必須具有大於交​​易金額的Amountlimit,並且該功能對於PermissionEvaluator非常酷。 – Nabil

回答

1

默認情況下,您只有Spring Security的權限。只需將所有角色和權限添加到權限集合中即可。那麼你可以這樣做:

hasRole("ROLE_TRANSACTION_USER") and hasRole("VALIDATE_TRANSACTION") 

在大多數情況下混合兩個不是問題。

您擁有Spring Security ACL module的權限,但只有在每個域對象具有不同的安全規則時,才需要ACL。

編輯。我認爲最簡單的做一些額外的安全檢查的方法是使用SpEL。示例:

@PreAuthorize("hasRole('ROLE_TRANSACTION_USER') 
    and hasRole('VALIDATE_TRANSACTION') 
    and @amountValidatorServiceBean.isAmountValidForCurrentUser(#amount)") 
public void doTransaction(Integer amount, ...) 
+0

將VALIDATE_TRANSACTION作爲角色的問題是,我們將無法使用自定義PermissionEvaluator來測試用戶是否有權使用給定數量驗證事務。 – Nabil

+0

使用SpEL直接在註釋中調用某些驗證邏輯可能更容易。在我的答案中查看詳情。 –

+0

謝謝,我將用這個解決方案來實現 – Nabil