shiro权限标识符的用法

xtiawxf 2015-10-26

简单使用

例如我们定义新增用户权限的字符串为:createUser,为role1添加创建用户的权限。
ini配置
  1. role1=createUser
我们可以通过以下方式验证权限
  1. subject.isPermitted("createUser");

多层次字符串表示权限

上边的简单的字符串形式,需要每个功能都定义一个字符串,不方便管理。shiro提供了多层次的权限组成。
创建用户的权限我们可以这样配置
 
某个实例单个权限
  1. role1=user:create

某个资源多个权限

多个权限逗号分隔
  1. role1=user:create,user:delete
程序中验证
  1. subject().checkPermissions("user:create","user:delete");
验证当前用户是否具有,用户的新增和删除的权限。
简写
  1. role1=user:create,delete
程序中验证
  1. subject().checkPermissions("user:create,delete");

某个资源所有权限

  1. role1=user:create,update,delete,view
简写
  1. role1=user:*
验证
  1. subject().checkPermissions("user:*");
 
多个资源某个权限
 
  1. role1=*:view
这个表达式代表的就是用户1拥有所有资源的查看的权限,不单单包括用户查看,还包括其他的,例如定单的查看等等。
验证
  1. subject().checkPermissions("user:view");

实例级别的权限

通配符同时可以支持实例级别的权限设置。
有三部分组成,第一部分是域(domain), 第二部分是操作(action), 第三部分是实例(instance)
某个实例的某个权限
例如:
  1. role1=user:update:1
表达的是,角色1 拥有实例1的更新权限。
第一部分可以是多个层次分隔的,例如:
  1. role1=app1:system:user:update:1
验证:
  1. if(SecurityUtils.getSubject().isPermitted("user:update:1"){
  2. }
某个实例的多个权限
例如:
  1. role1=user:update,delete:1
表达的是,角色1 拥有实例1 的更新和删除权限。
 
某个实例的所有权限
  1. role1=user:*:1
表达的是角色1 拥有 实例1 的所有操作权限(例如,create,update,delete,view等);
 
所有实例的某个权限
  1. role1=user:update:*
上边的表达式表达的是角色1拥有所有实例的更新权限。
验证:
  1. subject().checkPermissions("user:update:1","user:update:2")

所有实例的所有权限

  1. role1=user:*:*
表达的是,角色1 拥有 所有实例的所有权限。
 

缺失部分

对于缺失部分,表示拥有所缺失部分的所有权限。
 
例如
  1. user:update
等价于
  1. user:update:*

例如

  1. user
等价于
  1. user:*:*

相关推荐