日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣

發布時間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RBAC、控制權限設計、權限表設計 基于角色權限控制和基于資源權限控制的區別優劣

    • 一、介紹
    • 二、基于角色的權限設計
    • 三、基于資源的權限設計
    • 四、主體、資源、權限關系圖
    • 主體、資源、權限相關的數據模型
    • 自言自語

一、介紹

現階段我們知道的大概就是兩種權限設計

  • 一種是基于角色的權限設計
  • 另一種是基于資源的權限設計
  • 接下來我給大家講一講這兩種權限的區別,以及那種更好。

    在后面也會給出數據庫里表的設計的具體代碼。

    二、基于角色的權限設計

    RBAC基于角色的訪問控制(Role-Based Access Control)是按角色進行授權。例如:

    比如:主體的角色為總經理可以查 詢企業運營報表,查詢員工工資信息等,訪問控制流程如下:

    根據上圖中的判斷邏輯,授權代碼可表示如下:

    if(主體.hasRole("總經理角色id")){查詢工資 }

    如果上圖中查詢工資所需要的角色變化為總經理和部門經理,此時就需要修改判斷邏輯為“判斷用戶的角色是否是 總經理或部門經理”,修改代碼如下:

    if(主體.hasRole("總經理角色id") || 主體.hasRole("部門經理角色id")){查詢工資 }

    根據上邊的例子發現,當需要修改角色的權限時就需要修改授權的相關代碼,系統可擴展性差。

    我們敲代碼都知道的 公司中最忌修改源碼 因為牽一發而動全身。

    所以不是非常必要 就不要隨便修改原來的代碼。

    接下來 我們看一下基于資源的權限控制的設計是什么樣子吧。

    三、基于資源的權限設計

    RBAC基于資源的訪問控制(Resource-Based Access Control)是按資源(或權限)進行授權,比如:用戶必須 具有查詢工資權限才可以查詢員工工資信息等,訪問控制流程如下:

    根據上圖中的判斷,授權代碼可以表示為:

    if(主體.hasPermission("查詢工資權限標識")){ 查詢工資 }

    優點:系統設計時定義好查詢工資的權限標識,即使查詢工資所需要的角色變化為總經理和部門經理也不需要修改 授權代碼,系統可擴展性強。

    四、主體、資源、權限關系圖

    主體、資源、權限相關的數據模型

    主體(用戶id、賬號、密碼、…)

    主體(用戶)和角色關系(用戶id、角色id、…)

    角色(角色id、角色名稱、…)

    角色和權限關系(角色id、權限id、…)

    權限(權限id、權限標識、權限名稱、資源名稱、資源訪問地址、…)

    數據模型關系圖:

    具體表模型SQL:

    user表:

    DROP TABLE IF EXISTS `user_db`; CREATE TABLE `user_db` (`id` bigint(20) NOT NULL,`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`fullname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`mobile` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;INSERT INTO `user_db` VALUES (1, 'admin', '123456', '張三', '123');

    t_role表:

    DROP TABLE IF EXISTS `t_role`; CREATE TABLE `t_role` (`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`role_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`create_time` datetime(0) NULL DEFAULT NULL,`update_time` datetime(0) NULL DEFAULT NULL,`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `unique_role_name`(`role_name`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ---------------------------- -- Records of t_role -- ---------------------------- INSERT INTO `t_role` VALUES ('1', '管理員', NULL, NULL, NULL, '');

    t_user_role表:

    DROP TABLE IF EXISTS `t_user_role`; CREATE TABLE `t_user_role` (`user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`create_time` datetime(0) NULL DEFAULT NULL,`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`user_id`, `role_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ---------------------------- -- Records of t_user_role -- ---------------------------- INSERT INTO `t_user_role` VALUES ('1', '1', NULL, NULL);

    t_permission表:

    DROP TABLE IF EXISTS `t_permission`; CREATE TABLE `t_permission` (`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '權限標識符',`description` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',`url` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '請求地址',PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ---------------------------- -- Records of t_permission -- ---------------------------- INSERT INTO `t_permission` VALUES ('1', 'p1', '測試資源\r\n1', '/r/r1'); INSERT INTO `t_permission` VALUES ('2', 'p2', '測試資源2', '/r/r2');

    t_role_permission表:

    DROP TABLE IF EXISTS `t_role_permission`; CREATE TABLE `t_role_permission` (`role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`permission_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,PRIMARY KEY (`role_id`, `permission_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ---------------------------- -- Records of t_role_permission -- ---------------------------- INSERT INTO `t_role_permission` VALUES ('1', '1'); INSERT INTO `t_role_permission` VALUES ('2', '2');

    自言自語

    今天又完成一篇 ?

    看完這一篇 大家應該也會對權限的設計有了一些淺淺的理解吧。

    一起加油哦。

    總結

    以上是生活随笔為你收集整理的RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。