RBAC(基於角色的權限控制)模型的核心是在用戶和權限之間引入了角色的概念。取消了用戶和權限的直接關聯,改為通過用戶關聯角色、角色關聯權限的方法來間接地賦予用戶權限,從而達到用戶和權限解耦的目的。
RABC的好處
- 職能划分更謹慎。對於角色的權限調整不僅僅只影響單個用戶,而是會影響關聯此角色的所有用戶,管理員下發/回收權限會更為謹慎;
- 便於權限管理。對於批量的用戶權限調整,只需調整用戶關聯的角色權限即可,無需對每一個用戶都進行權限調整,既大幅提升權限調整的效率,又降低漏調權限的概率;
在不斷的發展過程中,RBAC也因不同的需求而演化出了不同的版本,目前主要有以下幾個版本:
- RBAC0,這是RBAC的初始形態,也是最原始、最簡單的RBAC版本;
- RBAC1,基於RBAC0的優化,增加了角色的分層(即:子角色),子角色可以繼承父角色的所有權限;
- RBAC2,基於RBAC0的另一種優化,增加了對角色的一些限制:角色互斥、角色容量等;
- RBAC3,最復雜也是最全面的RBAC模型,它在RBAC0的基礎上,將RBAC1和RBAC2中的優化部分進行了整合;
RBAC權限基本功能模塊:
RBAC權限基礎表:
1、用戶表:t_sys_user
CREATE TABLE `t_sys_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`account` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '賬號',
`nickname` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵稱',
`real_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '真實姓名',
`gender` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '2' COMMENT '1 : 男,0 : 女',
`email` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '郵箱',
`mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '電話',
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密碼',
`status` tinyint(1) NULL DEFAULT 1 COMMENT '\'0\'禁用,\'1\' 啟用, \'2\' 密碼過期或初次未修改',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '頭像',
`country` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '國家',
`province` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '省',
`city` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '市',
`area` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '區',
`street` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '街道詳細地址',
`comments` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '備注',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `INDEX_USER_NAME`(`real_name`) USING BTREE,
INDEX `INDEX_USER_PHONE`(`mobile`) USING BTREE,
INDEX `INDEX_USER_EMAIL`(`email`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用戶表' ROW_FORMAT = Dynamic;
2、角色表:t_sys_role
CREATE TABLE `t_sys_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父id',
`role_name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色名稱',
`role_key` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色標識',
`role_level` int(11) NULL DEFAULT NULL COMMENT '角色級別',
`role_status` tinyint(1) NULL DEFAULT 1 COMMENT '1有效,0禁用',
`comments` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `INDEX_ROLE_NAME`(`role_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic;
3、權限表(資源表):t_sys_resource
CREATE TABLE `t_sys_resource` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父id',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`ancestors` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所有上級組織id的集合,便於機構查找',
`resource_name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '資源名稱',
`resource_key` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '資源標識',
`resource_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '資源類型 1、模塊 2、菜單 3、按鈕 4、鏈接',
`resource_icon` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '資源圖標',
`resource_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '資源路徑',
`resource_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '資料鏈接',
`resource_level` int(11) NULL DEFAULT NULL COMMENT '資源級別',
`resource_show` tinyint(1) NULL DEFAULT NULL COMMENT '是否顯示',
`resource_cache` tinyint(1) NULL DEFAULT NULL COMMENT '是否緩存',
`resource_page_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '資源頁面名稱',
`resource_status` tinyint(1) NULL DEFAULT 1 COMMENT '1有效,0禁用',
`comments` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '備注',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `INDEX_PERM_NAME`(`resource_name`) USING BTREE,
INDEX `INDEX_PERM_PID`(`parent_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '權限表' ROW_FORMAT = Dynamic;
4、組織機構表:t_sys_organization
CREATE TABLE `t_sys_organization` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`parent_id` bigint(20) NULL DEFAULT NULL COMMENT '父組織id',
`ancestors` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所有上級組織id的集合,便於機構查找',
`organization_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '組織類型:1:事業部 2:機構 3:鹽城',
`organization_name` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '組織名稱',
`organization_key` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '組織編碼',
`organization_icon` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '組織圖標',
`organization_level` int(11) NULL DEFAULT NULL COMMENT '組織級別(排序)',
`organization_status` tinyint(1) NULL DEFAULT 1 COMMENT '1有效,0禁用',
`province` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '省',
`city` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '市',
`area` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '區',
`street` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '街道',
`comments` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建日期',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `INDEX_ORG_NAME`(`organization_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '組織表' ROW_FORMAT = Dynamic;
5、用戶和角色關聯關系表:t_sys_user_role(多對多)
CREATE TABLE `t_sys_user_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`user_id` bigint(20) NOT NULL COMMENT '用戶id',
`role_id` bigint(20) NOT NULL COMMENT '角色id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建人',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE,
INDEX `INDEX_USER_ID`(`user_id`) USING BTREE,
INDEX `INDEX_ROLE_ID`(`role_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用戶和角色關聯表' ROW_FORMAT = Dynamic;
6、機構和用戶關聯關系表:t_sys_organization_user(一對多)
CREATE TABLE `t_sys_organization_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`organization_id` bigint(20) NOT NULL COMMENT '機構id',
`user_id` bigint(20) NOT NULL COMMENT '用戶id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
7、角色和權限(資源)關聯關系表:t_sys_role_resource(多對多)
CREATE TABLE `t_sys_role_resource` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`role_id` bigint(20) NOT NULL COMMENT '角色id',
`resource_id` bigint(20) NOT NULL COMMENT '資源id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和權限關聯表' ROW_FORMAT = Dynamic;
權限擴展表:
1、機構角色表:t_sys_organization_role(某機構下所有人員都具有某種角色的權限)
CREATE TABLE `t_sys_organization_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`organization_id` bigint(20) NOT NULL COMMENT '組織機構id',
`role_id` bigint(20) NOT NULL COMMENT '角色id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '可以給組織權限,在該組織下的所有用戶都有此權限' ROW_FORMAT = Dynamic;
2、數據權限配置表:t_sys_data_permission
CREATE TABLE `t_sys_data_permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`user_id` bigint(20) NOT NULL COMMENT '用戶id',
`organization_id` bigint(20) NOT NULL COMMENT '機構id',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建者',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '1:刪除 0:不刪除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
3、用戶信息擴展表:t_sys_user_info
這個根據自己業務具體需求進行擴展
CREATE TABLE `t_sys_user_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租戶id',
`parent_id` bigint(20) NULL DEFAULT 0 COMMENT '上級ID',
`user_id` bigint(20) NULL DEFAULT NULL COMMENT '系統用戶表用戶ID',
`wechat_open_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '小程序用戶openid',
`wechat_platform_open_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '公眾號用戶openid',
`wechat_union_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '微信用戶union id',
`telephone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '固定電話',
`wechat_number` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '微信號',
`qq_number` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'QQ號',
`user_type` smallint(1) NULL DEFAULT 1 COMMENT '用戶類型1、普通用戶',
`member_points` bigint(20) NULL DEFAULT 60 COMMENT '會員積分',
`work_unit` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工作單位',
`duties` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '職務',
`education` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '學歷',
`card_type` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '證件類型',
`card_number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '證件號碼',
`card_front` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '正面照片',
`card_reverse` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '反面照片',
`graduated` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '畢業院校',
`gender` int(1) NULL DEFAULT NULL COMMENT '性別',
`birthday` datetime(0) NULL DEFAULT NULL COMMENT '出生日期',
`graduated_date` date NULL DEFAULT NULL COMMENT '畢業時間',
`register_time` datetime(0) NULL DEFAULT NULL COMMENT '注冊日期',
`register_ip` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '注冊ip',
`last_login_time` datetime(0) NULL DEFAULT NULL COMMENT '最后登錄日期',
`last_login_ip` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最后登錄ip',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
`creator` bigint(20) NULL DEFAULT NULL COMMENT '創建人',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '最后修改時間',
`operator` bigint(20) NULL DEFAULT NULL COMMENT '最后修改人',
`del_flag` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否刪除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信注冊會員表' ROW_FORMAT = DYNAMIC;