zoukankan      html  css  js  c++  java
  • shiro 角色与权限的解读

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

  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/niceyoo/p/9291986.html
Copyright © 2011-2022 走看看