01、为什么 shiro 有了《角色》后,还要设置《角色权限》呢?(问题)

思考:设置好角色了,那么就代表什么操作都可以执行了吗?

理解:如果上边回答是的话,那么只是《角色》层次的控制。

举例:如果你是个老师,那么你就可以教学生数学课,但是现实呢,是个老师就能教数学课吗?体育老师、美术老师…路过;

所以:

  • 角色权限就是用来指定这个角色可以做哪些操作。
  • 换句话说角色就是某些权限的集合。
  • 比如学校里面校长,老师,学生,等角色,但是他们都有不同的职业,这就是权限。
  • 如果只有角色没有权限,那角色就没有意义了。

值的一提的是,《角色》 跟 《角色权限》 都是用来控制用户访问权限的,如果项目中只是需要用到 《角色》来限制用户访问,那么,角色权限就没什么用了,所以,《角色权限》更像是《角色》更加细化后的操作,比如上边学校老师、校长、学生那个例子;

02、代码小例子

/**
 * 权限认证
 */  
@Override  
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {  
    /**1、获取登录时输入的用户名**/
    String loginName=(String) principalCollection.fromRealm(getName()).iterator().next();  
    /**2、到数据库查是否有此对象  **/
    User user=userService.findByName(loginName);  
    if(user!=null){  
        /**2.1、权限信息对象info,用来存放查出的用户的所有的角色(role)及权限(permission)**/  
        SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();  
        /**2.2、用户的角色集合  **/
        info.addRoles(user.getRolesName());  
        /**2.3、用户的角色对应的所有权限,如果只使用角色定义访问权限,下面的四行可以不要  **/
        List<Role> roleList=user.getRoleList();  
        for (Role role : roleList) {  
            info.addStringPermissions(role.getPermissionsName());  
        }  
        return info;  
    }  
    return null;  
}  

上边代码截取的自定义 AuthorizingRealm 中的 doGetAuthenticationInfo 方法;

结合上方代码,举两个例子。

1、角色控制

场景描述:只允许(admin)登录角色显示。
界面代码:jsp代码(非前后端分离,仅供参考)

<shiro:hasRole name="manager">manager角色登录显示此内容</shiro:hasRole>  
<shiro:hasRole name="admin">admin角色登录显示此内容</shiro:hasRole>

后端代码:上边 2.2 步骤,用户角色设置中,如果给该用户 “admin”权限,那么在 jsp 中就能显示出第一条来。

info.addRoles("admin");  

2、权限控制

场景描述:只允许拥有 (add)权限的用户显示
界面代码:jsp代码(非前后端分离,仅供参考)

<shiro:hasPermission name="add">add权限用户显示此内容</shiro:hasPermission>  
<shiro:hasPermission name="edit">edit权限用户显示此内容</shiro:hasPermission>  

后端代码:上边 2.3 步骤,用户角色权限设置中,如果给该用户角色设置 “add”权限,那么在 jsp 中就能显示出第一条来。

info.addStringPermissions("add"); 

03、补充

关于 shiro 《角色》与《权限》相信你大概有一点概念了,下一篇会总结一下关于 shiro 常用注解,以及注解使用场景。

博客地址:http://www.cnblogs.com/niceyoo

18年专科毕业后一度迷茫,创建了一个用来记录自己成长的公众号,感兴趣的小伙伴可以关注一下~

shiro 角色与权限的解读的更多相关文章

  1. (2)shiro角色资源权限

    一般在web系统权限设计中,一般分为三个维度,用户,角色,资源,一个用户可以拥有多个角色,比如说可以是老师,也可以是班主任,一个角色也可以拥有多个资源. 比如老师同时拥有查看班级学生和批改作业的资源, ...

  2. Spring+shiro配置JSP权限标签+角色标签+缓存

    Spring+shiro,让shiro管理所有权限,特别是实现jsp页面中的权限点标签,每次打开页面需要读取数据库看权限,这样的方式对数据库压力太大,使用缓存就能极大减少数据库访问量. 下面记录下sh ...

  3. SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建

    SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...

  4. 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统

    一.前言 在大型的信息管理系统中,经常涉及到权限管理系统 下面来个 demo,很多复杂的系统的设计都来自它 代码已经放到github上了,地址:https://github.com/larger5/s ...

  5. spring boot shiro redis整合基于角色和权限的安全管理-Java编程

    一.概述 本博客主要讲解spring boot整合Apache的shiro框架,实现基于角色的安全访问控制或者基于权限的访问安全控制,其中还使用到分布式缓存redis进行用户认证信息的缓存,减少数据库 ...

  6. 基于Spring Aop实现类似shiro的简单权限校验功能

    在我们的web开发过程中,经常需要用到功能权限校验,验证用户是否有某个角色或者权限,目前有很多框架,如Shiro Shiro有基于自定义登录界面的版本,也有基于CAS登录的版本,目前我们的系统是基于C ...

  7. SpringMVC+Apache Shiro+JPA(hibernate)案例教学(四)基于Shiro验证用户权限,且给用户授权

    最新项目比较忙,写文章的精力就相对减少了,但看到邮箱里的几个催更,还是厚颜把剩下的文档补上. 一.修改ShiroDbRealm类,实现它的doGetAuthorizationInfo方法 packag ...

  8. Shiro系列(0) - 权限管理在J2EE企业级开发中的应用与实战

    其实也是应大家要求,讲一下权限管理,之前有讲过,但是没有拿出来细讲,这次索性录了视频从头到尾把shiro讲一遍.后续spring security会另外找个时间也讲一下. 主要内容会包括以下 1.了解 ...

  9. shiro实现动态权限管理

    用到shiro框架实现权限控制时,根据实际要求,权限在数据库增删改后都要把权限过滤链变化实时更新到服务器中. 1.配置文件里配置的filterchains都是静态的,但实际开发中更多的是从数据库中动态 ...

随机推荐

  1. 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...

  2. PHP 开发者的 Docker 之旅

    用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的.这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言.「PHP 是最好的语言」这个流传已久的梗,或 ...

  3. matplotlib绘图不显示问题解决plt.show()

    最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...

  4. 【转载 Hadoop&Spark 动手实践 2】Hadoop2.7.3 HDFS理论与动手实践

    简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Go ...

  5. 【Spark深入学习 -13】Spark计算引擎剖析

    ----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark ...

  6. mybatis中设置打印sql语句application.yml

    在application.yml配置文件中,找到数据源设置,添加: mybatis: configuration: log-impl:org.apache.ibatis.logging.stdout. ...

  7. 如何知道局域网内哪些ip被占用

    诶,有时候真是略捉急,开始的时候估摸了一个网段,试了3个都没有通,觉得这个一个个试验的方法简直捉急到家了.下面就为大家分享3种简单地如何查看ip地址是否被占用的方法. 1.ping windows键+ ...

  8. Cordova热更新cordova-hot-code-push

    原文转载自:https://www.cnblogs.com/huangenai/p/7137475.html cordova-hot-code-push ,Cordova热代码推送插件提供了在应用程序 ...

  9. 蜕变成蝶~Linux设备驱动之字符设备驱动

    一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流 ...

  10. FFMPEG 入门

    1. 下载网站:https://ffmpeg.zeranoe.com/builds/ 先后下载 Win32 Shared 和 Win32 Dev 两个版本,分别解压缩. 2. 用Visual Stud ...