美文网首页权限管理
通用数据级别权限的框架设计与实现(2)-数据权限的准备工作

通用数据级别权限的框架设计与实现(2)-数据权限的准备工作

作者: 爱余星痕 | 来源:发表于2018-05-19 12:39 被阅读57次

    查看上篇文章通用数据级别权限的框架设计(1)-相关业务场景的分析",我们要继续做一些准备工作。

    • 我们先要设置当前用户信息的类
    
    /**
     * @description: 用户对象
     * @author: starmark
     * @create: 2018-05-17 21:15
     **/
    @Data
    public class UserVo {
        private Long userId;
        private String UserName;
        /**
         * 拥有的相关角色
         */
        private Set<String> roles =new HashSet<>();
        /**
         * 相关的组织ID
         */
        private List<Long> orgIds=new ArrayList<>();
    
        public   boolean containRole(String roleCode){
            return this.getRoles().stream().anyMatch(role-> roleCode.equals(role));
        }
    }
    
    • 获取当前用户信息的工具类,为方便测试,我们写死返回用户的信息,返回用户ID为123456,属于角色user1,user2,属于组织ID为123,123456(注意把用户加进去,因为授权可能授权给部门,也可能授权给用户)
    /**
     * @description:
     * @author: starmark
     * @create: 2018-05-16 22:06
     **/
    @Data
    public class UserUtil {
        /**
         * 获取当前登陆的用户对象
         * @return
         */
        public static UserVo getUserVo(){
            UserVo userVo= new UserVo();
            userVo.setUserId(123456L);
            userVo.setUserName("test");
            userVo.getOrgIds().add(123456L);
            userVo.getOrgIds().add(123L);
            userVo.getRoles().add("user1");
            userVo.getRoles().add("user2");
            return userVo;
        }
    
        /**
         * 判断是否包含该角色CODE
         * @param roleCode
         * @return
         */
        public  static  boolean containRole(String roleCode) {
        return getUserVo().containRole(roleCode);
        }
    
        /**
         * 相关的组织ID
         */
        public static List<Long>   getOrgIds(){
            return getUserVo().getOrgIds();
        }
        
        /**
         * 获取当前用户ID
         */
        public static Long  getUserId(){
            return getUserVo().getUserId();
        }
    }
    
    • 构建需要测试的数据库,这里以角色表sys_auth_role,及角色人员表sys_auth_role_org_rel来测试,相关脚本如下:
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for sys_auth_role
    -- ----------------------------
    DROP TABLE IF EXISTS `sys_auth_role`;
    CREATE TABLE `sys_auth_role` (
      `id` bigint(16) NOT NULL COMMENT '主键',
      `code` varchar(200) NOT NULL COMMENT '编码',
      `name` varchar(200) NOT NULL COMMENT '名称',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of sys_auth_role
    -- ----------------------------
    INSERT INTO `sys_auth_role` VALUES ('1', '222', '22');
    INSERT INTO `sys_auth_role` VALUES ('2', '22222', '22ss');
    INSERT INTO `sys_auth_role` VALUES ('3', 'aaaaaaa', '22ss');
    
    -- ----------------------------
    -- Table structure for sys_auth_role_org_rel
    -- ----------------------------
    DROP TABLE IF EXISTS `sys_auth_role_org_rel`;
    CREATE TABLE `sys_auth_role_org_rel` (
      `id` bigint(16) NOT NULL COMMENT '主键',
      `role_id` bigint(200) NOT NULL COMMENT '角色ID',
      `org_id` bigint(16) NOT NULL COMMENT '组织ID',
      PRIMARY KEY (`id`),
      KEY `IDX_ROLE_ORG_REL_ROLEID` (`role_id`) USING BTREE,
      KEY `IDX_ROLE_ORG_REL_ORGID` (`org_id`),
      CONSTRAINT `d` FOREIGN KEY (`role_id`) REFERENCES `sys_auth_role` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of sys_auth_role_org_rel
    -- ----------------------------
    INSERT INTO `sys_auth_role_org_rel` VALUES ('1', '2', '123456');
    

    准备工作到这里结束。

    个人代码已经完成,如需要请打赏后通知我。
    谢谢,如果你觉得该文章对你有帮助,麻烦点赞。
    欢迎继续查看下篇文章-通用数据级别权限的框架设计(3)-数据列表的权限过滤

    相关文章

      网友评论

        本文标题:通用数据级别权限的框架设计与实现(2)-数据权限的准备工作

        本文链接:https://www.haomeiwen.com/subject/nibodftx.html