大多數小夥伴可能都了解,隻不過對于名詞比較陌生。RBAC就是使用者-菜單-權限的一套解決方案,大多數的系統權限菜單方案都是RBAC模型,
其中包括5張表:
使用者表 ( sys_user ):儲存使用者資訊
角色表 ( sys_role ):儲存角色資訊
權限表 ( sys_node ):儲存系統資源資訊。如:菜單、按鈕 和對應 URL
它們的關系 :使用者表與角色表是 多對多關系 ,角色表與資源表是多對多關系。
使用者角色關系表(sys_user_user):用于維護使用者和角色的關系
角色資源關系表(sys_access):用于維護角色與資源的關系

DROP TABLE IF EXISTS `sys_permission`;
CREATE TABLE `sys_permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '權限 ID',
`parent_id` bigint(20) DEFAULT NULL COMMENT '父權限 ID (0為頂級菜單)',
`name` varchar(64) NOT NULL COMMENT '權限名稱',
`code` varchar(64) DEFAULT NULL COMMENT '授權辨別符',
`url` varchar(255) DEFAULT NULL COMMENT '授權路徑',
`type` int(2) NOT NULL DEFAULT '1' COMMENT '類型(1菜單,2按鈕)',
`icon` varchar(200) DEFAULT NULL COMMENT '圖示',
`remark` varchar(200) DEFAULT NULL COMMENT '備注',
`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COMMENT='權限表';
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色 ID',
`name` varchar(64) NOT NULL COMMENT '角色名稱',
`remark` varchar(200) DEFAULT NULL COMMENT '角色說明',
`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='角色表';
DROP TABLE IF EXISTS `sys_role_permission`;
CREATE TABLE `sys_role_permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵 ID',
`role_id` bigint(20) NOT NULL COMMENT '角色 ID',
`permission_id` bigint(20) NOT NULL COMMENT '權限 ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COMMENT='角色權限表';
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '使用者 ID',
`username` varchar(50) NOT NULL COMMENT '使用者名',
`password` varchar(64) NOT NULL COMMENT '密碼,加密存儲, admin/1234',
`is_account_non_expired` int(2) DEFAULT '1' COMMENT '帳戶是否過期(1 未過期,0已過期)',
`is_account_non_locked` int(2) DEFAULT '1' COMMENT '帳戶是否被鎖定(1 未過期,0已過期)',
`is_credentials_non_expired` int(2) DEFAULT '1' COMMENT '密碼是否過期(1 未過期,0已過期)',
`is_enabled` int(2) DEFAULT '1' COMMENT '帳戶是否可用(1 可用,0 删除使用者)',
`nick_name` varchar(64) DEFAULT NULL COMMENT '昵稱',
`mobile` varchar(20) DEFAULT NULL COMMENT '注冊手機号',
`email` varchar(50) DEFAULT NULL COMMENT '注冊郵箱',
`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`) USING BTREE,
UNIQUE KEY `mobile` (`mobile`) USING BTREE,
UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='使用者表';
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵 ID',
`user_id` bigint(20) NOT NULL COMMENT '使用者 ID',
`role_id` bigint(20) NOT NULL COMMENT '角色 ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='使用者角色表';