2013-10-15 44 views
1

如何用一個參數調用hasPermission函數?彈簧安全使用hasPermission內只有一個參數的PreAuthorize

目前,我有這樣的事情:

@PreAuthorize("hasPermission('someResource', 'READ')") 

我希望能夠做到這一點:

@PreAuthorize("hasPermission('canReadSomeResource')") 

是否有一個簡單的方法來做到這一點?我基本上只想指定調用方法所需的權限,而不是資源和權限。

回答

2

hasPermission()的具體用途是檢查用戶是否有權對特定域對象執行操作。如果您只想檢查用戶是否具有某種通用權限,則應使用hasRole()

+0

好的,除了hasRole()之外還有其他的東西嗎?在我的模型中,每個角色都被分配了一組權限,並且我想註解一個需要權限的方法。通過這種方式,我不知道哪些角色是有效的,我希望能夠檢查用戶對特定權限的角色。 – user1751547

+0

@ user1751547您使用的是哪種驗證提供程序?一般的建議是讓每個權限成爲權限並將其全部添加到用戶的列表中。 – chrylis

+0

我已經擴展了AbstractUserDetailsAuthenticationProvider。這個問題的答案似乎表明我可以做我想做的事情:http://stackoverflow.com/questions/18097152/custom-annotation-with-spring-security我不知道如何實現它。 – user1751547

0

我認爲你需要hasAuthority('canReadSomeResource')來檢查訪問資源的用戶權限。

@PreAuthorize("hasAuthority('canReadSomeResource')") 
public void myMethod(){ 
    ... 
} 

也就是說機構(canReadSomeResource)可以通過實施UserDetailsService接口被提供給彈簧的安全性。