什么是RBAC
RBAC 是基于角色的访问控制(
Role-Based Access Control
)在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
参考:https://shuwoom.com/?p=3041
这边管理系统只用最简单的RBAC0模型
表设计
- sys_user表
CREATE TABLE `sys_user` (
`id` varchar(32) NOT NULL,
`username` varchar(32) NOT NULL COMMENT '用户名',
`password` varchar(64) NOT NULL COMMENT '密码',
`sex` char(1) DEFAULT NULL COMMENT '性别 0 女| 1 男',
`locked` char(1) DEFAULT NULL COMMENT '是否锁住 0 否 | 1 是',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新者',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- sys_role表
CREATE TABLE `sys_role` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`code` varchar(32) NOT NULL COMMENT '角色编码',
`name` varchar(32) DEFAULT NULL COMMENT '角色名称',
`forbidden` varchar(1) DEFAULT NULL COMMENT '是否禁用 0:正常 | 1:禁用',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';
- sys_menu表
CREATE TABLE `sys_menu` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`parent_id` varchar(32) DEFAULT '0' COMMENT '父级菜单ID',
`code` varchar(32) NOT NULL COMMENT '菜单编码',
`name` varchar(32) NOT NULL COMMENT '菜单名称',
`type` char(1) DEFAULT NULL COMMENT '菜单类型 0:菜单 | 1:按钮(权限)',
`permission` varchar(32) DEFAULT NULL COMMENT '权限标识',
`icon` varchar(32) DEFAULT NULL COMMENT '图标',
`path` varchar(32) DEFAULT NULL COMMENT '路由地址',
`component` varchar(32) DEFAULT NULL COMMENT '组件路径',
`sort` varchar(32) DEFAULT NULL COMMENT '排序',
`forbidden` varchar(1) DEFAULT NULL COMMENT '是否禁用 0:正常 | 1:禁用',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='菜单表';
- sys_user_role表
CREATE TABLE `sys_user_role` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`user_id` varchar(32) NOT NULL COMMENT '用户ID',
`role_id` varchar(32) NOT NULL COMMENT '角色ID',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_role` (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户角色关系表';
- sys_role_menu表
CREATE TABLE `sys_role_menu` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`role_id` varchar(32) NOT NULL COMMENT '角色ID',
`menu_id` varchar(32) NOT NULL COMMENT '菜单ID',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_role_menu` (`role_id`,`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色菜单关系表';
再来一个代码生成配置表,后面的业务代码统一由这个表配置生成
- sys_gen
CREATE TABLE `sys_gen` (
`id` varchar(32) NOT NULL COMMENT 'ID',
`table_name` varchar(32) NOT NULL COMMENT '表名',
`table_prefix` varchar(32) DEFAULT NULL COMMENT '表名前缀 填写前缀,生成实体不包含前缀',
`module` varchar(32) NOT NULL COMMENT '模块名称 模块名称用来分类',
`description` varchar(32) DEFAULT NULL COMMENT '功能描述',
`author` varchar(32) DEFAULT NULL COMMENT '作者',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='代码生成表 ';
以上就是基于权限的后台管理基础表。