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

简介: 查看上篇文章通用数据级别权限的框架设计(1)-相关业务场景的分析",我们要继续做一些准备工作。我们先要设置当前用户信息的类/** * @description: 用户对象 * @author: starmark * @create: 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)-数据列表的权限过滤

相关文章
|
存储
字符数组的初始化
在编程中,字符数组是用来存储一系列字符的变量类型。字符数组通常用于存储字符串,字符串是字符的序列。在使用字符数组之前,我们需要对其进行初始化,以分配内存空间并设置初始值。下面将详细介绍字符数组的初始化方法,并附上相应的代码示例。
255 2
|
机器学习/深度学习 缓存 并行计算
NVIDIA Tesla GPU系列P4、T4、P40以及V100参数性能对比
NVIDIA Tesla系列GPU适用于高性能计算(HPC)、深度学习等超大规模数据计算,Tesla系列GPU能够处理解析PB级的数据,速度比使用传统CPU快几个数量级,NVIDIA Tesla GPU系列P4、T4、P40以及V100是Tesla GPU系列的明星产品,云服务器吧分享NVIDIA.
83135 1
|
11月前
|
Ubuntu Linux 测试技术
Linux系统之部署轻量级Markdown文本编辑器
【10月更文挑战第6天】Linux系统之部署轻量级Markdown文本编辑器
490 1
Linux系统之部署轻量级Markdown文本编辑器
|
11月前
|
前端开发
React Memo
10月更文挑战第11天
147 6
|
自然语言处理 Cloud Native 安全
适应多样化需求:WASM 插件在全链路灰度发布中的应用
MSE(微服务引擎)在微服务全链路灰度场景下提供了一套成熟的功能,支持内容规则和百分比规则的灰度路由策略。
61781 103
|
10月前
|
开发框架 JavaScript 搜索推荐
我的博客网站为什么又回归Blazor了
码界工坊(https://dotnet9.com)是一个使用 .NET 9 Blazor 开发的博客网站,经过多次技术迭代,最终采用静态 SSR 和 Ant Design 设计风格。网站包含技术文章、开源项目介绍和在线工具,源码已开源(https://github.com/dotnet9/CodeWF)。感谢 Known、AntBlazor 和社区的贡献。
|
存储 缓存 Java
Java本地高性能缓存实践问题之使用@CachePut注解来更新缓存中的数据的问题如何解决
Java本地高性能缓存实践问题之使用@CachePut注解来更新缓存中的数据的问题如何解决
282 0
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
A module cannot have multiple default exports.是、关闭Vetur扩展,或者重启项目,神奇的bug,复制代码造成的
|
存储 算法 C++
【C++ 包装器类 std::tuple】全面入门指南:深入理解并掌握C++ 元组 std::tuple 的实用技巧与应用(三)
【C++ 包装器类 std::tuple】全面入门指南:深入理解并掌握C++ 元组 std::tuple 的实用技巧与应用
345 0
|
存储 算法 Java
QT中的线程池的介绍和使用
QT中的线程池的介绍和使用
375 0