文章主要转载自:http://minjiechenjava.iteye.com/blog/2252020,
并做了部分修改,感谢原作者
简单使用
例如我们定义新增用户权限的字符串为:createUser,为role1添加创建用户的权限。
ini配置
role1=createUser
我们可以通过以下方式验证权限
subject.isPermitted("createUser");
多层次字符串表示权限
上边的简单的字符串形式,需要每个功能都定义一个字符串,不方便管理。shiro提供了多层次的权限组成。
创建用户的权限我们可以这样配置
某个实例单个权限
role1=user:create
某个资源多个权限
多个权限逗号分隔
role1=user:create,user:delete
程序中验证
subject().checkPermissions("user:create","user:delete");
验证当前用户是否具有,用户的新增和删除的权限。
简写
role1=user:create,delete
程序中验证
subject().checkPermissions("user:create,delete");
某个资源所有权限
role1=user:create,update,delete,view
简写
role1=user:*
验证
subject().checkPermissions("user:*");
注意:反过来不成立
多个资源某个权限
role1=*:view
这个表达式代表的就是用户1拥有所有资源的查看的权限,不单单包括用户查看,还包括其他的,例如定单的查看等等。
验证
subject().checkPermissions("user:view");
实例级别的权限
通配符同时可以支持实例级别的权限设置。
有三部分组成,第一部分是域(domain), 第二部分是操作(action), 第三部分是实例(instance)
某个实例的某个权限
例如:
role1=user:update:1
表达的是,角色1 拥有实例1的更新权限。
第一部分可以是多个层次分隔的,例如:
role1=app1:system:user:update:1
验证:
if(SecurityUtils.getSubject().isPermitted("user:update:1"){
}
某个实例的多个权限
例如:
role1=user:update,delete:1
表达的是,角色1 拥有实例1 的更新和删除权限。
某个实例的所有权限
role1=user:*:1
表达的是角色1 拥有 实例1 的所有操作权限(例如,create,update,delete,view等);
所有实例的某个权限
role1=user:update:*
上边的表达式表达的是角色1拥有所有实例的更新权限。
验证:
subject().checkPermissions("user:update:1","user:update:2")
所有实例的所有权限
role1=user:*:*
表达的是,角色1 拥有 所有实例的所有权限。
缺失部分
对于缺失部分,表示拥有所缺失部分的所有权限。
例如
user:update
等价于
user:update:*
例如
user
等价于
user:*:*