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管理權限》