RBAC模型 - 数据库设计

现在我们项目组在RBAC传统基础上进行了扩展,引入了用户组/部门概念,下面详细介绍。

1.关系图

图1 权限模型

数据库设计

2.数据库设计

序号 表名 描述 备注
1 sys_user 用户表
2 sys_role 角色表
3 sys_permission 用户表
4 sys_group 用户组/部门
5 sys_user_role 用户角色关系表
6 sys_role_permission 角色权限关系表
7 sys_group_user 用户组角色关系表
8 sys_group_role 用户组角色关系表
9 sys_menu 菜单信息表
10 sys_permission_menu 权限菜单信息表

备注:用户的权限总合是用户组+用户的并集。

数据库设计需根据实际的开发需求而定,表中字段仅仅包含初始参数,数据库脚本如下所示!

CREATE TABLE `sys_group`  (
  `key_id` bigint NOT NULL COMMENT '分组主键id',
  `group_name` varchar(30) NULL COMMENT '组名',
  PRIMARY KEY (`key_id`)
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '分组信息' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_group_role`  (
  `key_id` bigint NOT NULL COMMENT '组别角色主键id',
  `group_id` bigint NULL COMMENT '组别id',
  `role_id` bigint NULL COMMENT '角色id',
  PRIMARY KEY (`key_id`)
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '组别角色信息' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_menu`  (
  `key_id` bigint NOT NULL COMMENT '菜单主键id',
  `menu_name` varchar(30) NULL COMMENT '菜单名称',
  PRIMARY KEY (`key_id`)
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sys菜单信息' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_permission`  (
  `key_id` bigint NOT NULL COMMENT '权限主键id',
  `permission_name` varchar(50) NULL COMMENT '权限名称',
  PRIMARY KEY (`key_id`)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限信息表' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_permission_menu`  (
  `key_id` bigint NOT NULL COMMENT '权限菜单id',
  `permission_id` bigint NULL COMMENT '权限id',
  `menu_id` bigint NULL COMMENT '菜单id',
  PRIMARY KEY (`key_id`)
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '权限菜单信息' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_role`  (
  `key_id` bigint NOT NULL COMMENT '角色id',
  `role_name` varchar(100) NULL COMMENT '角色名称',
  PRIMARY KEY (`key_id`)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统角色' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_role_permission`  (
  `key_id` bigint NOT NULL COMMENT '角色权限主键id',
  `permission_id` bigint NULL COMMENT '权限id ',
  `role_id` bigint NULL COMMENT '角色id',
  PRIMARY KEY (`key_id`)
);

CREATE TABLE `sys_user`  (
  `key_id` bigint NOT NULL COMMENT '用户主键id',
  `user_name` varchar(20) NULL COMMENT '用户姓名',
  `user_phone` varchar(20) NULL COMMENT '用户电话',
  PRIMARY KEY (`key_id`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统用户管理' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_user_group`  (
  `key_id` bigint NOT NULL COMMENT '用户分组id',
  `group_id` bigint NULL COMMENT '组别id',
  `user_id ` bigint NULL COMMENT '用户id',
  PRIMARY KEY (`key_id`)
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户分组信息' ROW_FORMAT = DYNAMIC;

CREATE TABLE `sys_user_role`  (
  `key_id` bigint NOT NULL COMMENT '用户角色主键id',
  `user_id` bigint NOT NULL COMMENT '用户Id',
  `role_id` bigint NOT NULL COMMENT '角色Id',
  PRIMARY KEY (`key_id`)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户角色关联表' ROW_FORMAT = DYNAMIC;

ALTER TABLE `sys_group_role` ADD CONSTRAINT `fk_sys_group_role_sys_group_role_1` FOREIGN KEY (`group_id`) REFERENCES `sys_group` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_group_role` ADD CONSTRAINT `fk_sys_group_role_sys_group_role_2` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_permission_menu` ADD CONSTRAINT `fk_sys_permission_menu_sys_permission_menu_1` FOREIGN KEY (`permission_id`) REFERENCES `sys_permission` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_permission_menu` ADD CONSTRAINT `fk_sys_permission_menu_sys_permission_menu_2` FOREIGN KEY (`menu_id`) REFERENCES `sys_menu` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_role_permission` ADD CONSTRAINT `fk_sys_role_permission_sys_role_permission_1` FOREIGN KEY (`permission_id`) REFERENCES `sys_permission` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_role_permission` ADD CONSTRAINT `fk_sys_role_permission_sys_role_permission_2` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_user_group` ADD CONSTRAINT `fk_sys_user_group_sys_user_group_1` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_user_group` ADD CONSTRAINT `fk_sys_user_group_sys_user_group_2` FOREIGN KEY (`group_id`) REFERENCES `sys_group` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_user_role` ADD CONSTRAINT `fk_sys_user_role_sys_user_role_1` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `sys_user_role` ADD CONSTRAINT `fk_sys_user_role_sys_user_role_2` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`key_id`) ON DELETE CASCADE ON UPDATE CASCADE;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容