细粒度权限控制(一)RBAC表设计

本文介绍了一种基于角色的访问控制(RBAC)系统设计方法,并详细展示了如何通过MySQL数据库表结构来实现这一权限管理系统。文章包括了管理员、角色、菜单及权限关系等核心表的设计细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

细粒度权限控制(一)RBAC表设计

        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第一弹结束。

        

               




        

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值