RBAC
RBAC介绍
RBAC 是基于角色的访问控制(Role-Based Access Control )
基础的RBAC模型中,三张基本信息表分别为:用户、角色、权限。 表达三张信息表的关系,就需要用户-角色,角色-权限映射表
RBAC 关系图
创建表
用户表
CREATE TABLE `sys_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(100) DEFAULT NULL COMMENT '密码',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`mobile` varchar(100) DEFAULT NULL COMMENT '手机号',
`status` tinyint DEFAULT (1) COMMENT '状态 0:禁用 1:正常',
`created_by` varchar(50) DEFAULT NULL COMMENT '创建者',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_by` varchar(50) DEFAULT NULL COMMENT '更新者',
`updated_at` varchar(50) DEFAULT NULL COMMENT '更新时间',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
`organization_id` bigint DEFAULT (0) COMMENT '组织ID',
PRIMARY KEY (`user_id`),
KEY `username` (`username`) USING BTREE,
KEY `mobile` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='系统用户';
角色表
CREATE TABLE `sys_role` (
`role_id` bigint NOT NULL AUTO_INCREMENT,
`role_name` varchar(100) DEFAULT NULL COMMENT '角色名称',
`remark` varchar(100) DEFAULT NULL COMMENT '备注',
`create_user_id` bigint DEFAULT NULL COMMENT '创建者ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`organization_id` bigint DEFAULT (0) COMMENT '组织ID',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
`updated_by` varchar(50) DEFAULT NULL COMMENT '更新者',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
`created_by` varchar(50) DEFAULT NULL COMMENT '创建者',
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='角色';
权限表
CREATE TABLE `sys_menu` (
`menu_id` bigint NOT NULL AUTO_INCREMENT,
`parent_id` bigint DEFAULT NULL COMMENT '父菜单ID,一级菜单为0',
`name` varchar(50) DEFAULT NULL COMMENT '菜单名称',
`url` varchar(200) DEFAULT NULL COMMENT '菜单URL',
`perms` varchar(500) DEFAULT NULL COMMENT '授权(多个用逗号分隔,如:user:list,user:create)',
`type` int DEFAULT NULL COMMENT '类型 0:目录 1:菜单 2:按钮',
`icon` varchar(50) DEFAULT NULL COMMENT '菜单图标',
`order_num` int DEFAULT NULL COMMENT '排序',
`home_page` int DEFAULT (0) COMMENT '首页标志 0:不是 1:是',
`tab_page` int DEFAULT '0' COMMENT '标签页 0:普通页 1:标签页',
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1763734034434781186 DEFAULT CHARSET=utf8mb4 COMMENT='菜单管理';
用户组
CREATE TABLE `sys_group` (
`group_id` bigint NOT NULL AUTO_INCREMENT,
`group_name` varchar(100) DEFAULT NULL COMMENT '组名称',
`remark` varchar(100) DEFAULT NULL COMMENT '备注',
`create_user_id` bigint DEFAULT NULL COMMENT '创建者ID',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`organization_id` bigint DEFAULT (0) COMMENT '组织ID',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
`updated_by` varchar(50) DEFAULT NULL COMMENT '更新者',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
`created_by` varchar(50) DEFAULT NULL COMMENT '创建者',
PRIMARY KEY (`group_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='组';
用户-角色
CREATE TABLE `sys_user_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
`role_id` bigint DEFAULT NULL COMMENT '角色ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='用户与角色对应关系';
用户组-用户
CREATE TABLE `sys_user_group` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint DEFAULT NULL COMMENT '用户ID',
`group_id` bigint DEFAULT NULL COMMENT '组ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='用户与组对应关系';
用户组-角色
CREATE TABLE `sys_role_group` (
`id` bigint NOT NULL AUTO_INCREMENT,
`role_id` bigint DEFAULT NULL COMMENT '角色ID',
`group_id` bigint DEFAULT NULL COMMENT '组ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='角色与组对应关系';
角色-权限
CREATE TABLE `sys_role_menu` (
`id` bigint NOT NULL AUTO_INCREMENT,
`role_id` bigint DEFAULT NULL COMMENT '角色ID',
`menu_id` bigint DEFAULT NULL COMMENT '菜单ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='角色与菜单对应关系';
总结
RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现用户和权限的逻辑分离。
表的数量和关联关系应结合实际业务场景进行扩展和维护。