MyBatis 入门教程-简单RBAC权限管理系统设计

在我们企业级后台应用开发的过程中,一个比较经典的应用场景就是权限控制操作。采用RBAC(Role-Based Access Control,基于角色的访问控制)。这是一个比较经典的应用场景。后续的案例都是基于这个权限控制来实现的。

MyBatis 入门教程-简单RBAC权限管理系统设计

基于RBAC权限管理是解决如下的需求:一个用户有若干的角色、一个角色有若干的权限,权限的意思就是对于某个模块的CRUD操作。这样就构成了 用户-角色-权限的授权模型。如上图所示,涉及到了五张表:用户表、角色表、权限表、用户角色关系表和角色权限关系表。

创建数据库表

根据上面的分析,需要创建的表有五个分别是用户表、角色表、权限表、用户角色关系表和角色权限关系表。

这里执行如下的一些SQL建表语句

用户表

CREATE TABLE sys_user(
    id BIGINT NOT NULL   COMMENT '主键ID' ,
    user_name VARCHAR(32)    COMMENT '用户名' ,
    user_password VARCHAR(32)    COMMENT '密码' ,
    user_email VARCHAR(32)    COMMENT '邮箱' ,
    user_info TEXT    COMMENT '简介' ,
    head_image TEXT    COMMENT '头像' ,
    create_time DATETIME    COMMENT '创建时间' ,
    PRIMARY KEY (id)
) COMMENT = '用户表 ';;

角色表

CREATE TABLE sys_role(
    id BIGINT NOT NULL   COMMENT '角色ID' ,
    role_name VARCHAR(32)    COMMENT '角色名' ,
    eabled CHAR(1)    COMMENT '有效标志' ,
    create_by VARCHAR(32)    COMMENT '创建人' ,
    create_time DATETIME    COMMENT '创建时间' ,
    PRIMARY KEY (id)
) COMMENT = '角色表 ';;

权限表

CREATE TABLE sys_privilege(
    id BIGINT    COMMENT '权限ID' ,
    privilege_name VARCHAR(32)    COMMENT '权限名称' ,
    privilege_url VARCHAR(32)    COMMENT '权限URL' 
) COMMENT = '权限表 ';;

用户角色关联表

CREATE TABLE sys_user_role(
    user_id BIGINT    COMMENT '用户ID' ,
    role_id BIGINT    COMMENT '角色ID' 
) COMMENT = '用户角色关联表 ';;

用户权限关联表

CREATE TABLE sys_role_privilege(
    role_id BIGINT    COMMENT '角色ID' ,
    privilege_id BIGINT    COMMENT '权限ID' 
) COMMENT = '角色权限关联表 ';;


为了后续的测试,可以自己在数据库中建立对应的业务逻辑关系数据,来测试数据权限操作。

创建实体

在MyBatis中默认采用的是下划线驼峰命名规则,也就是说数据库字段中的下划线会以驼峰命名的方式在实体类中展示。

这里首先来看一下用户表对应的实体类

public class SysUser {

    /**
     * 用户ID
     */
    private Long id;
    /**
     * 用户名
     */
    private String userName;
    /**
     * 用户密码
     */
    private String userPassword;
    /**
     * 邮箱
     */
    private String userEmail;
    /**
     * 简介
     */
    private String userInfo;
    /**
     * 头像
     */
    private String headImage;
    /**
     * 创建时间
     */
    private Date createTime;
  // 为了代码干净整洁,这里省略get/set方法。
}

可以看到在SysUser类中采用了驼峰命名的方式。这里其实并没有太多的要求,只要能与数据库字段进行映射就可以了,后续还可以通过ResultMap的方式进行字段匹配的映射。

在MyBatis中,数据库字段与Java类型的对应关系不需要刻意去记忆。只需要对一些特殊的关键字段注意一下就可以了。因为在Java 中对于基本数据类型都会有默认值,但是在一些引用类型判断的时候就会出现问题,因为例如int类型的数据默认值是0,但是如果要进行引用对象判断的时候,这个指向0 的引用会一直存在,所以就会导致很多的问题。所以在设置实体类的时候建议不要使用基本数据类型作为判断。

同样的,其他的表也通过这种方式进行创建。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章