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

  • 相关阅读:
    【Feature】使用Feature导入WebPart
    千万别动SharePoint数据库
    【PS】使用PowerShell创建WinForm程序(转载)
    【WebServices】调用 SharePoint WebServices 注意事项
    【转载】十一种Web网站程序性能测试工具介绍
    【List Event Receivers】区分自定义“事件处理”功能的两种部署方式
    [转] SharePoint Server 2007 页面模型
    第一天 从此在这记录学习C++的点点滴滴
    《C++ Primer》第7章 函数
    Emacs 自动填充头文件
  • 原文地址:https://www.cnblogs.com/niceyoo/p/9291986.html
Copyright © 2011-2022 走看看