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

查看上篇文章通用数据级别权限的框架设计(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)-数据列表的权限过滤

推荐阅读更多精彩内容