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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏别先生

MySql的基本操作以及以后开发经常使用的常用指令

第一章:数据类型和操作数据表 MySQL语句的规范 (1):关键字与函数名称全部大写 (2):数据库名称,表名称,字段名称全部小写 (3):SQL语句必须以分号...

203100
来自专栏Python

mysql:索引原理与慢查询优化

一 索引的原理 1. 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。相似的例子...

74880
来自专栏LanceToBigData

MySQL(八)之DML

昨天晚上很晚的时候才写完MySQL的常用函数,今天给大家讲一下MySQL的DML。接下来让我们直接来学习了,今天感冒了。身体很难受下午的时候要去买一波药了,不然...

21090
来自专栏技术博文

多表关联是ON和WHERE的区别

很多时候,开发在书写SQL的时候不能正确的理解和运用ON和WHERE的区别。今天就简单演示介绍下(有图有真相)。 原理:数据库在通过连接多张表来返回记录时,都会...

33870
来自专栏hbbliyong

SQL SERVER 原来还可以这样玩 FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活...

28670
来自专栏Java成神之路

Oracle学习笔记_01_SQL初步

   DML: Data Manipulation Language        数据操纵语言 DDL: Data Definition Languag...

8630
来自专栏散尽浮华

MySQL存储引擎之Myisam和Innodb总结性梳理

Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM InnoDB 构成上的区别: 每个MyISAM...

21750
来自专栏北京马哥教育

给linux用户的11个高级MySQL数据库面试问题和答案

1. 如何使用SELECT语句找到你正在运行的服务器的版本并打印出当前数据库的名称? 答:下面的语句的结果会显示服务器的版本和当前的数据库名称 mysql>...

28840
来自专栏兵马勇的专栏

sparksql 中外连接查询中的谓词下推处理

上月听了本部门 sparksqll 大牛的 sparksql 调优分享,当时对一个点不是很理解,回去好好理了一下,整理成文。

90410
来自专栏程序猿

SQL 注入语句特征

语句特征 1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass passwor...

534110

扫码关注云+社区

领取腾讯云代金券