天天看點

五分鐘帶你玩轉SpringSecurity(三)常見又陌生,帶你了解RBAC模型

大多數小夥伴可能都了解,隻不過對于名詞比較陌生。RBAC就是使用者-菜單-權限的一套解決方案,大多數的系統權限菜單方案都是RBAC模型,

其中包括5張表:

使用者表 ( sys_user ):儲存使用者資訊

角色表 ( sys_role ):儲存角色資訊

權限表 ( sys_node ):儲存系統資源資訊。如:菜單、按鈕 和對應 URL

它們的關系 :使用者表與角色表是 多對多關系 ,角色表與資源表是多對多關系。

使用者角色關系表(sys_user_user):用于維護使用者和角色的關系

角色資源關系表(sys_access):用于維護角色與資源的關系

五分鐘帶你玩轉SpringSecurity(三)常見又陌生,帶你了解RBAC模型
mysql腳本

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='使用者角色表';
       

繼續閱讀