後臺管理權限設計

前言

最近一直在重寫後臺系統,對使用的界面與技術進行一次更新。涉及到權限這塊,最初考慮引入Shiro,但由於對這個框架理解不太深,並且項目DeadLine在那放着,所以決定自己搞一套,畢竟自己搞的比較熟悉方便維護,也方便二次開發定製。

需求明確

以下是整理的現階段需求,以後有二期需求再加上

一、用戶未登錄時,會提示未登錄並轉到登錄界面

二、用戶賬戶被鎖定時,會提示被鎖定並轉到登錄界面

三、用戶在沒有權限時,點擊後臺按鈕會提示無權限

四、菜單要根據給用戶分配的角色填充,只出現該角色可展示的菜單

五、不攔截靜態資源,如:css、js、html等

六、區分是否是Ajax請求,是的話返回對應json數據

七、用戶只能查看自己的產品

數據庫設計

需求明確就可以設計數據庫了,這個根據項目、業務來。

用戶表

產品表

角色表

菜單表

權限表

用戶與產品關聯表

用戶與角色關聯表

角色與菜單關聯表

角色與權限關聯表

以下是對應結構圖:
圖片:Baidu_icon

首先看菜單設計

CREATE TABLE `uadmin_menu` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id',
  `MenuName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜單名稱',
  `ParentId` int(11) NOT NULL COMMENT '父級ID',
  `Url` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜單鏈接地址',
  `SortOrder` int(11) NOT NULL COMMENT '排序編號',
  `CreateDate` datetime NOT NULL COMMENT '創建時間',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ParenId是菜單的父級ID,代表着層級關係,例如:根菜單ParenId爲0,Id爲1,它的子菜單對應的ParenId爲1;Url字段對應的是點擊打開的網址,因爲可能是父級菜單,所以可以爲空;SortOrder是菜單的排序編號,主要爲了針對性地調整菜單顯示的順序。

再看看權限設計

CREATE TABLE `uadmin_power` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id',
  `MenuId` int(11) NOT NULL COMMENT '所屬菜單ID',
  `PowerCode` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '權限編碼',
  `PowerName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '權限名稱',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

該權限是對應菜單下的方法級權限,可以控制菜單對應界面的按鈕。每次用戶點擊後,有個自定義攔截器去查詢是否有該權限;PowerCode字段對應的是菜單界面按鈕的權限,該按鈕方法上加自定義權限註解,傳入權限編碼PowerCode

角色設計

CREATE TABLE `uadmin_role` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id' COMMENT '角色表主鍵',
  `RoleName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名稱',
  `Remark` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '備註',
  `CreateDate` datetime NOT NULL COMMENT '創建時間',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

角色表比較簡單,我這裏設計的角色是默認無權限的,得與菜單表、權限表相關聯。

商品設計

CREATE TABLE `uproduct` (
  `appID` int(11) NOT NULL COMMENT '產品識別appID',
  `appkey` varchar(255) DEFAULT NULL COMMENT '產品識別appKey',
  `appSecret` varchar(255) DEFAULT NULL COMMENT '產品識別appSecret',
  PRIMARY KEY (`appID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

商品表也比較簡單,可以根據自己的業務需求定製,這主要是做後臺用戶所屬商品關聯查詢的,對應用戶只能查看對應商品。

用戶設計

CREATE TABLE `uadmin_user` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶表主鍵',
  `UserName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用戶名',
  `Password` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密碼',
  `DepartmentId` int(11) NOT NULL COMMENT '所屬部門編號',
  `HasLock` bit(1) NOT NULL COMMENT '鎖定狀態,0爲啓用,1爲禁用',
  `CreateDate` datetime NOT NULL COMMENT '生成時間',
  `RealName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真實姓名',
  `Mobile` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手機號',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

這裏跟角色一樣,沒有超級用戶,都是空白權限,需要自己對其定製。HasLock字段表示是否鎖定,如果鎖定了,攔截器會把該用戶操作攔截下來,跳轉登錄頁面。

關聯表設計

五張主表之間的關聯表,簡單來說就是用來做相互的對應關係的,由關聯表id,主表id構成。

權限攔截流程設計

Baidu_icon

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章