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