我是靠谱客的博主 疯狂果汁,这篇文章主要介绍Shiro角色权限和权限添加与判断操作(四),现在分享给大家,希望可以做个参考。

一、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角色权限和权限添加与判断操作(四)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(136)

评论列表共有 0 条评论

立即
投稿
返回
顶部