#关于Shiro框架权限标识符中*使用的总结
Shiro框架中独创的权限标识符(Wildcard Perssions)可以很优雅的开发一些权限控制应用。基本规则官方文档说的很清楚了,这里记一下使用时碰到的一些问题。
###关于权限标识符中*的使用 Shiro权限标识符的的默认规则:
规则:“资源标识符:操作:对象实例ID” 即对哪个资源的哪个实例可以进行什么操作。其默认支持通配符权限字符串,“:”表示资源/操作/实例的分割;“,”表示操作的分割;“*”表示任意资源/操作/实例。
通常我们只用到“资源标识符:操作”级别赖控制权限,比如“user:create”表示当前用户表示需要有“user”资源的“create”操作权限。权限标识符是支持通配符的,就像星号*,这里的星号指的是任何权限,比如“user:*”,指的就是对“user”资源的任意操作。但是,这个*在代码中控制权限应该注意:操作标识符的指的是用户需要拥有该资源的***所有***权限,而不是***任意一个***权限。
举个Srping mvc中Controller的栗子,当前user资源有view,create,update,delete操作.对于代码中的某个方法,有如下的权限控制声明:
@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的权限标识符时,对于操作,星号*指的是拥有资源的***所有***操作权限。而***不是***拥有资源***任意***权限。
###引用资料 开涛的Shiro教程: