什么是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='代码生成表 ';

以上就是基于权限的后盾治理根底表。