RBAC打造通用WEB權限


 

 

 

 

RBAC不用給用戶單個分配權限,只用指向對應的角色就會有對應的權限,而且分配權限和收回權限都很方便

5個關系對應5張表

五張表設計

 1 CREATE TABLE `user` (
 2   `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
 3   `name` varchar(20) NOT NULL DEFAULT '' COMMENT '姓名',
 4   `email` varchar(30) NOT NULL DEFAULT '' COMMENT '郵箱',
 5   `is_admin` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否是超級管理員 1表示是 0 表示不是',
 6   `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態 1:有效 0:無效',
 7   `updated_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '最后一次更新時間',
 8   `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
 9   PRIMARY KEY (`id`),
10   KEY `idx_email` (`email`)
11 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='用戶表';
12 
13 CREATE TABLE `role` (
14   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
15   `name` varchar(50) NOT NULL DEFAULT '' COMMENT '角色名稱',
16   `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態 1:有效 0:無效',
17   `updated_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '最后一次更新時間',
18   `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
19   PRIMARY KEY (`id`)
20 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';
21 
22 CREATE TABLE `user_role` (
23   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
24   `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用戶id',
25   `role_id` int(11) NOT NULL DEFAULT '0' COMMENT '角色ID',
26   `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
27   PRIMARY KEY (`id`),
28   KEY `idx_uid` (`uid`)
29 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶角色表';
30 
31 CREATE TABLE `access` (
32   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
33   `title` varchar(50) NOT NULL DEFAULT '' COMMENT '權限名稱',
34   `urls` varchar(1000) NOT NULL DEFAULT '' COMMENT 'json 數組',
35   `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態 1:有效 0:無效',
36   `updated_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '最后一次更新時間',
37   `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
38   PRIMARY KEY (`id`)
39 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='權限詳情表';
40 
41 CREATE TABLE `role_access` (
42   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
43   `role_id` int(11) NOT NULL DEFAULT '0' COMMENT '角色id',
44   `access_id` int(11) NOT NULL DEFAULT '0' COMMENT '權限id',
45   `created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '插入時間',
46   PRIMARY KEY (`id`),
47   KEY `idx_role_id` (`role_id`)
48 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色權限表';
49 
50 CREATE TABLE `app_access_log` (
51   `id` int(11) NOT NULL AUTO_INCREMENT,
52   `uid` bigint(20) NOT NULL DEFAULT '0' COMMENT '品牌UID',
53   `target_url` varchar(255) NOT NULL DEFAULT '' COMMENT '訪問的url',
54   `query_params` longtext NOT NULL COMMENT 'get和post參數',
55   `ua` varchar(255) NOT NULL DEFAULT '' COMMENT '訪問ua',
56   `ip` varchar(32) NOT NULL DEFAULT '' COMMENT '訪問ip',
57   `note` varchar(1000) NOT NULL DEFAULT '' COMMENT 'json格式備注字段',
58   `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
59   PRIMARY KEY (`id`),
60   KEY `idx_uid` (`uid`)
61 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶操作記錄表';
62 
63 
64 INSERT INTO `user` (`id`, `name`, `email`, `is_admin`, `status`, `updated_time`, `created_time`)
65 VALUES(1, '超級管理員', 'apanly@163.com', 1, 1, '2016-11-15 13:36:30', '2016-11-15 13:36:30');

 用戶與角色關聯起來,角色與權限關聯起來,通過判斷角色來管理權限(哪些頁面不能訪問)

 

 判斷權限邏輯:根據用戶ID取出用戶角色==》如果是超級管理員則不需要做權限判斷,否則根據角色取出所屬權限==》根據權限取出可訪問鏈接列表==》判斷當前操作是否在列表中==》無權限則返回提示頁面;

 

本內容整理自慕課網視頻教程——《RBAC打造通用web管理權限》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM