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. linux清理日志脚本

    1.删除日志的命令 find 目录路径 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例如:#!/bin/bash find /usr/loc ...

  2. stl综合

    区别: List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector ...

  3. yii2快速導出phpexcel

    https://packagist.org/packages/moonlandsoft/yii2-phpexcel 安装方式:首先是已经安装过Composer,则通过 Composer 下载安装 Mo ...

  4. 误删除libc.so.6的解决

    最近安装一个软件需要glibc-2.17. 使用ldd --version 发现系统的glibc版本为 glibc-2.12,当时没有想到更好的方法,就尝试将系统的glibc版本修改为glibc-2. ...

  5. yum安装mysql-5.6(centos7)

    centos 7.3 安装mysql 5.6 rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm yu ...

  6. 【转】Android 为什么 dp2px 或 px2dp 公式需要加 0.5f

    转自:http://blog.csdn.net/changcsw/article/details/52440543 网上 dp2px 和 px2dp 公式: public static int px2 ...

  7. pyqt4手动编写资源文件

    资源文件resource.qrc为XML格式,格式较简单,可以手动编辑: <!DOCTYPE RCC><RCC version="1.0"> <qre ...

  8. FTP连接服务器总报错的问题解决

    在使用宝塔面板的时候,我在使用FTP的时候,总有这样的问题,FTP老是连接不上,花了两个小时左右的时间总算找到问题:端口问题. 首先一般的FTP端口是:21,22,我这里就改成:9527 了 然后回到 ...

  9. layui实现左侧菜单点击右侧内容区显示

    https://segmentfault.com/a/1190000014617129

  10. java个人博客源码

    初入博客园,请各位多关照,来而不往非礼也. 如需要源码以及学习内容,qq:1397617269,我看到就回你们资源. 直接给链接: 链接:https://pan.baidu.com/s/1S_awtg ...