通用数据级别权限的框架设计与实现(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)-数据列表的权限过滤

相关文章
|
SQL 数据安全/隐私保护
通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤
查看上篇文章通用数据级别权限的框架设计与实现(2)-数据权限的准备工作,我们开始数据列表的权限过滤. 原理:我们在做过滤列表时,根据用户权限自动注入到相关SQL中,实现相关过滤,如果拥有全部权限,则不生成相关SQL片段 首先我们来分析一下数据列表的SQL 能看到所有数据的SQL SELECT role.
1180 0
|
SQL 存储 数据库
数据权限这样设计,你觉得如何?
在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用RBAC模型是不够的,本文我们尝试在RBAC模型的基础上融入数据权限的管理控制。
3105 1
|
数据安全/隐私保护
通用数据级别权限的框架设计与实现
个人花了不到2天时间,写了一个通用数据级别权限的框架设计与实现。 欢迎提意见及评论。有空请打赏! 通用数据级别权限的框架设计与实现(1)-相关业务场景的分析 通用数据级别权限的框架设计与实现(2)-数据权限的准备工作 通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤 通用数据级别权限的框架设计与实现(4)-单条记录的权限控制 通用数据级别权限的框架设计与实现(5)-总结与延伸思考 个人代码已经完成,如需要请打赏后通知我。
2332 0
|
SQL 数据库
【自然框架】之通用权限(六):权限到节点
      “直率没有错,但是也要考虑对方的承受能力呀!对方都承受不了了,你还直率,那就是你的错了!”  ——我的名言,呵呵。     ====================我就是传说中的,可爱的、无奈的、笑笑而过的分割线====================         继续,这是第六章了。
987 0
|
数据库
【自然框架】之通用权限(九):权限的验证
继续,这是第九章了。本来这张应该好好写的,不过还是先简单介绍一下吧,以后有空再补上详细说明吧。 通用权限想要写的文章目录:(这是第九章)   1、 简介、数据库的总体结构2、 介绍人员表组3、 介绍组织结构表组4、 介绍角色表组5、 介绍“项目自我描述表组”6、 权限到节点7、 权限到...
783 0
|
数据库
【自然框架】之通用权限:数据库设计的几种使用方式
      上次《【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图 》里说了一大堆的表,好多人说太复杂了,做到权限到模块就可以了。       这个嘛,我也没有说所有的表都要一起使用呀。
1204 0
|
数据库
【自然框架】之通用权限(二):人员表组
      继续,这是第二章了。本来想在这一章里面介绍三个表组来着,但是我有点写不好的感觉,还是多分几章吧,这一章就只介绍人员表组。第二章到第五章主要是介绍表结构。我是习惯使用Excel来设计表,一开始的时候只能记录表名、字段名、字段类型、字段说明等信息,但是一直没能找到如何使用Excel来体现出来表之间的关系。
1104 0
|
SQL
【自然框架】之通用权限(四):角色表组
      继续,这是第四章了。这里涉及到了资源方面的,不过有点绕,所以这里先介绍一下表结构,在后面的章节里面,再举例子详细介绍。 通用权限想要写的文章目录:(这是第四章)   1、 简介、数据库的总体结构2、 介绍人员表组3、 介绍组织结构表组4、 介绍角色表组5、 介绍“项目自我描...
863 0