第三篇 RBAC权限管理 数据库设计详解

导语
  在上篇文章中,介绍了关于RBAC权限管理机制的演进过程,并且了解了RBAC权限控制模型的几种建设方案。那么下面我们就来详细通过数据库设计来说明一下RABC数据权限管理系统建设。

简介

  首先简单的介绍一下在我们设计的RBAC权限管理系统中有那些实体类。既然要完成权限管理系统,那么必不可少的就是用户信息表。在RBAC权限系统中提到的两个关键表,角色表、菜单权限表。由于要对人员用户进行管理,所以还有部门表和职位表。一共是五个实体表。在系统中需要管理用户与角色的关系、用户与岗位的关系、角色与部门的关系、角色与菜单权限的关系。所以又建立了四个关系表,如下图所示。
在这里插入图片描述

建立数据表

  下面就来分别看一下这九张表示如何建立?

用户信息表(sys_user)

  用户信息表,主要记录了用户登录账号、登录密码、用户名,所属部门等信息。
在这里插入图片描述

建表语句

CREATE TABLE sys_user(
    user_id BIGINT NOT NULL   COMMENT '用户ID' ,
    dept_id BIGINT    COMMENT '部门ID' ,
    login_name VARCHAR(32)    COMMENT '登录账号' ,
    user_name VARCHAR(32)    COMMENT '用户名' ,
    user_type CHAR(1)    COMMENT '用户类型' ,
    email VARCHAR(32)    COMMENT '用户邮箱' ,
    phonenumber VARCHAR(32)    COMMENT '手机号码' ,
    sex CHAR(1)    COMMENT '用户性别' ,
    avatar VARCHAR(32)    COMMENT '用户头像' ,
    password VARCHAR(32)    COMMENT '用户密码' ,
    salt VARCHAR(32)    COMMENT '加密盐' ,
    state CHAR(1)    COMMENT '账号状态' ,
    del_flag CHAR(1)    COMMENT '删除标识' ,
    login_ip VARCHAR(32)    COMMENT '最后登录IP' ,
    login_date DATETIME    COMMENT '最后登录时间' ,
    pwd_update_date DATETIME    COMMENT '密码更新时间' ,
    create_by VARCHAR(32)    COMMENT '创建人' ,
    create_time DATETIME    COMMENT '创建时间' ,
    update_by VARCHAR(32)    COMMENT '更新人' ,
    update_time DATETIME    COMMENT '更新时间' ,
    remark VARCHAR(32)    COMMENT '备注' ,
    PRIMARY KEY (user_id)
) COMMENT = '用户信息表 ';

角色信息表(sys_role)

在这里插入图片描述
建表语句

CREATE TABLE sys_role(
    role_id BIGINT NOT NULL   COMMENT '角色ID' ,
    role_name VARCHAR(32)    COMMENT '角色名称' ,
    role_key VARCHAR(32)    COMMENT '角色权限字符串' ,
    role_sort INT    COMMENT '显示顺序' ,
    data_scope VARCHAR(32)    COMMENT '数据范围' ,
    state VARCHAR(32)    COMMENT '状态' ,
    del_flag CHAR(1)    COMMENT '删除标识' ,
    create_by VARCHAR(32)    COMMENT '创建人' ,
    create_time DATETIME    COMMENT '创建时间' ,
    update_by VARCHAR(32)    COMMENT '更新人' ,
    update_time DATETIME    COMMENT '更新时间' ,
    remark VARCHAR(32)    COMMENT '备注' ,
    PRIMARY KEY (role_id)
) COMMENT = '角色信息表 ';

岗位信息表(sys_post)

在这里插入图片描述
建表语句

CREATE TABLE sys_post(
    post_id BIGINT NOT NULL   COMMENT '岗位ID' ,
    post_code VARCHAR(32)    COMMENT '岗位编码' ,
    post_name VARCHAR(32)    COMMENT '岗位名称' ,
    post_sort INT    COMMENT '岗位顺序' ,
    state CHAR(1)    COMMENT '岗位状态' ,
    create_by VARCHAR(32)    COMMENT '创建人' ,
    create_time DATETIME    COMMENT '创建时间' ,
    update_by VARCHAR(32)    COMMENT '更新人' ,
    update_time DATETIME    COMMENT '更新时间' ,
    remark VARCHAR(32)    COMMENT '备注' ,
    PRIMARY KEY (post_id)
) COMMENT = '岗位信息表 ';

部门信息表(sys_dept)

在这里插入图片描述
建表语句

CREATE TABLE sys_dept(
    dept_id BIGINT NOT NULL   COMMENT '部门ID' ,
    parent_id BIGINT    COMMENT '父部门ID' ,
    ancestors VARCHAR(32)    COMMENT '祖级列表' ,
    dept_name VARCHAR(32)    COMMENT '部门名称' ,
    order_num INT    COMMENT '显示顺序' ,
    leader VARCHAR(32)    COMMENT '部门负责人' ,
    phone VARCHAR(32)    COMMENT '联系电话' ,
    email VARCHAR(32)    COMMENT '邮箱' ,
    state CHAR(1)    COMMENT '部门状态' ,
    del_flag CHAR(1)    COMMENT '删除标识' ,
    create_by VARCHAR(32)    COMMENT '创建人' ,
    create_time DATETIME    COMMENT '创建时间' ,
    update_by VARCHAR(32)    COMMENT '更新人' ,
    update_time DATETIME    COMMENT '更新时间' ,
    remark VARCHAR(32)    COMMENT '备注' ,
    PRIMARY KEY (dept_id)
) COMMENT = '部门信息表 ';

菜单权限表(sys_menu)

在这里插入图片描述
建表语句

CREATE TABLE sys_menu(
    menu_id BIGINT NOT NULL   COMMENT '菜单ID' ,
    menu_name VARCHAR(32)    COMMENT '菜单名称' ,
    parent_id BIGINT    COMMENT '父菜单ID' ,
    order_num INT    COMMENT '显示顺序' ,
    url VARCHAR(32)    COMMENT '请求地址' ,
    target VARCHAR(32)    COMMENT '打开方式' ,
    menu_type VARCHAR(32)    COMMENT '菜单类型' ,
    visible CHAR(1)    COMMENT '菜单状态' ,
    is_refresh CHAR(1)    COMMENT '是否刷新' ,
    perms VARCHAR(32)    COMMENT '权限标识' ,
    icon VARCHAR(32)    COMMENT '菜单图标' ,
    create_by VARCHAR(32)    COMMENT '创建人' ,
    create_time DATETIME    COMMENT '创建时间' ,
    update_by VARCHAR(32)    COMMENT '更新人' ,
    update_time DATETIME    COMMENT '更新时间' ,
    remark VARCHAR(32)    COMMENT '备注' ,
    PRIMARY KEY (menu_id)
) COMMENT = '菜单权限表 ';

用户和角色关联表(sys_user_role)

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

用户和岗位关联表(sys_user_post)

CREATE TABLE sys_user_post(
    user_id BIGINT NOT NULL   COMMENT '用户ID' ,
    post_id BIGINT NOT NULL   COMMENT '岗位ID' ,
    PRIMARY KEY (user_id,post_id)
) COMMENT = '用户和岗位关联表 ';

角色和部门关联表(sys_role_dept)

CREATE TABLE sys_role_dept(
    role_id BIGINT NOT NULL   COMMENT '角色ID' ,
    dept_id BIGINT NOT NULL   COMMENT '部门ID' ,
    PRIMARY KEY (role_id,dept_id)
) COMMENT = '角色和部门关联表 ';

角色和菜单关联表(sys_role_menu)

CREATE TABLE sys_role_menu(
    role_id BIGINT NOT NULL   COMMENT '角色ID' ,
    menu_id BIGINT NOT NULL   COMMENT '菜单ID' ,
    PRIMARY KEY (role_id,menu_id)
) COMMENT = '角色和菜单关联表 ';

总结

  以上就是基础的建表语句,通过上面的建表语句系统开发使用的基础RBAC的权限控制表。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
rbac数据库设计 1 rbac数据库设计 RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中⼼进⾏访问控制分享⽜原创,分享⽜系列,分享⽜。rbac ⽤户⾓⾊权限资源表如 何设计呢?下⾯开始表的设计RBAC表结构。 1.1 ⽤户表 CREATE TABLE `sys_user` ( `id` varchar(36) NOT NULL COMMENT '主键', `usercode` varchar(32) NOT NULL COMMENT '账号', `username` varchar(64) NOT NULL COMMENT '姓名', `password` varchar(32) NOT NULL COMMENT '密码', `salt` varchar(64) DEFAULT NULL COMMENT '盐', `locked` char(1) DEFAULT NULL COMMENT '账号是否锁定,1:锁定,0未锁定', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1.2 ⾓⾊表 CREATE TABLE `sys_role` ( `id` varchar(36) NOT NULL, `name` varchar(128) NOT NULL, `available` char(1) DEFAULT NULL COMMENT '是否可⽤,1:可⽤,0不可⽤', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1.3 ⽤户⾓⾊中间表 CREATE TABLE `sys_user_role` ( `id` varchar(36) NOT NULL, `sys_user_id` varchar(32) NOT NULL, `sys_role_id` varchar(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1.4 权限表 CREATE TABLE `sys_permission` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(128) NOT NULL COMMENT '资源名称', `type` varchar(32) NOT NULL COMMENT '资源类型:menu,button,', `url` varchar(128) DEFAULT NULL COMMENT '访问url地址', `percode` varchar(128) DEFAULT NULL COMMENT '权限代码字符串', `parentid` bigint(20) DEFAULT NULL COMMENT '⽗结点id', `parentids` varchar(128) DEFAULT NULL COMMENT '⽗结点id列表串', `sortstring` varchar(128) DEFAULT NULL COMMENT '排序号', `available` char(1) DEFAULT NULL COMMENT '是否可⽤,1:可⽤,0不可⽤', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1.5 ⾓⾊权限表 CREATE TABLE `sys_role_permission` ( `id` varchar(36) NOT NULL, `sys_role_id` varchar(32) NOT NULL COMMENT '⾓⾊id', `sys_permission_id` varchar(32) NOT NULL COMMENT '权限id', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1.6 初始化数据 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - shiro ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nihui123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值