一、Shiro是基于RBAC: 基于角色的权限管理
简单理解为:谁扮演什么角色, 被允许做什么操作
用户对象:user: 当前操作用户
角色对象:role:表示权限操作许可权的集合
权限对象:permission: 资源操作许可权
例子:张三(user) 下载(permission)一个高清无码的种子(资源), 需要VIP权限(role)
张三--->普通用户--->授权---->VIP用户----->下载种子
二、授权三种方式:

三、权限设置与验证
项目结构:

先理解一个概念:
在ini文件中用户、角色、权限的配置规则是:“用户名=密码,角色1,角色2...” “角色=权限1,权限2...”,首先根据用户名找角色,再根据角色找权限,角色是权限集合。
权限字符串的规则是:“资源标识符:操作:资源实例标识符”,意思是对哪个资源的哪个实例具有什么操作,“:”是资源/操作/实例的分割符,权限字符串也可以使用*通配符。
例子:
用户创建权限:user:create,或user:create:*
用户修改实例001的权限:user:update:001
用户实例001的所有权限:user:*:001
一般而已,我们操作只需要关注前面两节:
资源:操作 :
*:* : 所有资源的所有操作权限--->admin
1)ini文件配置:
[users]
#模拟数据库用户列表,账号=密码,此用户有role1和role2两个角色
zhangsan=666,role1,role2
lisi=888,role2
[roles]
#角色role1对资源user拥有create,update权限
role1=user:create,user:update
role2=user:create,user:delete
role3=usser:create
2)测试类:
public class ShiroTest {
public static void main(String[] args) {
Factory<SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro-permission.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "666");
subject.login(token);
System.out.println("登陆是否成功" + subject.isAuthenticated());
//判断当前用户是否有某个角色的权限
System.out.println(subject.hasRole("role1"));
//判断用户是否拥有一些角色权限,true则全有,false则不全部拥有
System.out.println(subject.hasAllRoles(Arrays.asList("role1","role2")));
System.out.println(subject.hasAllRoles(Arrays.asList("role1","role2","role3")));
//判断用户是否拥有一些角色权限,返回boolean数组,true则代表有某个权限
System.out.println(
Arrays.toString(subject.hasRoles(Arrays.asList("role1","role2","role3" )))
);
//如果有该角色权限,有则无操作,如果无则报错
subject.checkRole("role1");
System.out.println("----------------------");
//判断用户是否有某个权限
System.out.println(subject.isPermitted("user:create"));
//判断用户是否有一些权限,都有则返回true,不全有则返回false
System.out.println(subject.isPermittedAll("user:create","user:update"));
System.out.println(subject.isPermittedAll("user:list","user:update"));
//判断用户是否拥有一些权限,返回数组
System.out.println(
Arrays.toString(subject.isPermitted("user:list","user:delete"))
);
//判断用户是否拥有权限,有则无操作,如果无则报错
subject.checkPermission("user:list");
}
}
3)控制台输出:

最后
以上就是疯狂果汁最近收集整理的关于Shiro角色权限和权限添加与判断操作(四)的全部内容,更多相关Shiro角色权限和权限添加与判断操作(四)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复