關於Shiro框架權限標識符中*使用的總結

#關於Shiro框架權限標識符中*使用的總結java

Shiro框架中首創的權限標識符(Wildcard Perssions)能夠很優雅的開發一些權限控制應用。基本規則官方文檔說的很清楚了,這裏記一下使用時碰到的一些問題。mvc

###關於權限標識符中*的使用 Shiro權限標識符的的默認規則:app

規則:「資源標識符:操做:對象實例ID」 即對哪一個資源的哪一個實例能夠進行什麼操做。其默認支持通配符權限字符串,「:」表示資源/操做/實例的分割;「,」表示操做的分割;「*」表示任意資源/操做/實例。框架

一般咱們只用到「資源標識符:操做」級別賴控制權限,好比「user:create」表示當前用戶表示須要有「user」資源的「create」操做權限。權限標識符是支持通配符的,就像星號*,這裏的星號指的是任何權限,好比「user:*」,指的就是對「user」資源的任意操做。可是,這個*在代碼中控制權限應該注意:操做標識符的指的是用戶須要擁有該資源的全部權限,而不是任意一個權限。jsp

舉個Srping mvc中Controller的栗子,當前user資源有view,create,update,delete操做.對於代碼中的某個方法,有以下的權限控制聲明:ui

@RequiresPermissions(value = {"user:*"} )
@RequestMapping(value="/list-user")
public void listUser(){
	//listusers
}

原本寫這段代碼的意思是:只要擁有user資源任意權限的用戶,都能獲取用戶列表。可是程序運行後,會有問題:無論是有」user:create「,"user:delete"仍是"user:view"的用戶,調用listuser都會提示權限不足,除非用戶同時擁有create,delete,view權限。對於jsp頁面中,使用Shiro自帶的權限控制標籤,也會有相同的狀況。 ###總結 在代碼中使用Shiro的權限標識符時,對於操做,星號*指的是擁有資源的全部操做權限。而不是擁有資源任意權限。code

###引用資料 開濤的Shiro教程:http://jinnianshilongnian.iteye.com/blog/2020017對象

相關文章
相關標籤/搜索