1、每个项目大概都会有个对应的后台管理系统,应对自己的项目运行过程中的出现的一些非理想性事件。
2、权限可能会跟用户的等级或者说标识有关,比如扣扣的VIP,会涉及到部分权限的控制。
3、博主本篇的目的是:
告诉读者怎么设计RBAC的表。
4、设计如图(4-1):(mysql实现):
图(4-1)
tb_admin表 admin_id 用户唯一标识,用户表和别的表进行关联的唯一约束。
tb_admin_role表 role_id 角色唯一标识,创建角色的时候的角色id,关联唯一约束。
tb_admin_menu表 menu_id 菜单id,对角色或者用户进行赋予权限的时候的关联约束。
tb_admin_role_rel表 admin_id 对应tb_admin表中的唯一标识(admin_id)
tb_admin_role_menu_rel表 role_id 对应tb_admin_role中的role_id,
menu_id对应tb_admin_menu中的唯一约束。
点击下载对应的npm:https://pan.baidu.com/s/1rsUfM06lKbwU0kz_VkpXFQ 密码: i885
5、sql语句如下:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `tb_admin`
-- ----------------------------
DROP TABLE IF EXISTS `tb_admin`;
CREATE TABLE `tb_admin` (
`admin_id` varchar(50) NOT NULL,
`admin_name` varchar(50) NOT NULL,
`pass` varchar(150) NOT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`modify_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`status` int(2) NOT NULL DEFAULT '1',
`last_login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `tb_admin_menu`
-- ----------------------------
DROP TABLE IF EXISTS `tb_admin_menu`;
CREATE TABLE `tb_admin_menu` (
`menu_id` varchar(50) NOT NULL,
`menu_name` varchar(100) NOT NULL,
`menu_type` varchar(2) NOT NULL,
`parent_id` varchar(50) DEFAULT NULL,
`status` int(1) NOT NULL DEFAULT '1',
`url` varchar(255) DEFAULT NULL,
`count_num` int(11) NOT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`modify_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `tb_admin_role`
-- ----------------------------
DROP TABLE IF EXISTS `tb_admin_role`;
CREATE TABLE `tb_admin_role` (
`role_id` int(11) NOT NULL AUTO_INCREMENT,
`role_name` varchar(50) NOT NULL,
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `tb_admin_role_menu_rel`
-- ----------------------------
DROP TABLE IF EXISTS `tb_admin_role_menu_rel`;
CREATE TABLE `tb_admin_role_menu_rel` (
`role_id` int(11) NOT NULL,
`menu_id` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `tb_admin_role_rel`
-- ----------------------------
DROP TABLE IF EXISTS `tb_admin_role_rel`;
CREATE TABLE `tb_admin_role_rel` (
`admin_id` varchar(50) NOT NULL,
`role_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `tb_admin` VALUES ('admin','admin','admin','2018-05-04 14:16:26','2018-05-04 14:16:26','1','2018-05-10 17:35:01'), ('SimBa','SimBa','888888','2018-05-09 09:52:01','2018-05-09 09:52:01','1','2018-05-09 09:52:01');
INSERT INTO `tb_admin_menu` VALUES ('M1','用户模块','M',NULL,'1',NULL,'1','2018-05-04 14:01:01','2018-05-04 14:02:17'), ('M1010','用户管理','M','M1','1',NULL,'11','2018-05-04 14:01:48','2018-05-04 14:03:39'), ('M1011','权限管理','M','M1','1',NULL,'111','2018-05-04 14:03:32','2018-05-04 14:03:45'), ('M1012','角色管理','M','M1','1',NULL,'112','2018-05-05 09:47:36','2018-05-05 09:47:36'), ('O101001','新建用户','O','M1010','1',NULL,'1101','2018-05-04 14:04:35','2018-05-05 09:51:24'), ('O101002','用户删除','O','M1010','1',NULL,'1102','2018-05-04 14:05:00','2018-05-04 17:50:36'), ('O101003','用户编辑','O','M1010','1',NULL,'1103','2018-05-04 14:05:25','2018-05-04 17:50:38'), ('O101101','权限分配','O','M1011','1',NULL,'1111','2018-05-05 09:57:29','2018-05-05 09:57:29'), ('O101201','新建角色','O','M1012','1',NULL,'1121','2018-05-05 09:49:03','2018-05-05 09:49:03'), ('O101202','删除角色','O','M1012','1',NULL,'1122','2018-05-05 09:49:38','2018-05-05 09:49:38'), ('O101203','角色编辑','O','M1012','1',NULL,'1123','2018-05-05 09:50:49','2018-05-05 09:50:49');
INSERT INTO `tb_admin_role` VALUES ('1','root'), ('2','subAdmin');
INSERT INTO `tb_admin_role_menu_rel` VALUES ('2','M1'), ('2','M1010'), ('2','M1011'), ('2','M1012'), ('1','M1'), ('1','M1010'), ('1','M1011'), ('1','M1012'), ('1','O101001'), ('1','O101002'), ('1','O101003'), ('1','O101101'), ('1','O101201'), ('1','O101202'), ('1','O101203');
INSERT INTO `tb_admin_role_rel` VALUES ('admin','1'), ('SimBa','2');
6、RBAC细粒度权限控制中最重要的是menu表,这里的设计请先导入数据到你的数据库中,自己想思考一下为什么这样设计,这样设计的意义是什么?不明白的请联系博主,博主再看到之后会给出答复。RBAC第一弹结束。