您好,登錄后才能下訂單哦!
小編給大家分享一下yii2如何實現rbac,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
RBAC(Role-Based Access Control )基于角色的訪問控制。
1.基本思想:在用戶和訪問權限之間引入角色的概念,將用戶和角色聯系起來,通過對角色的授權來控制用戶對系統資源的訪問,相對傳統訪問控制 引入角色極大地簡化了權限的管理。 (推薦學習:yii框架)
1).角色:可以理解為一定數量的權限的集合,權限的載體。例如:一個論壇系統,“超級管理員”、“版主”都是角色。
2).權限:版主可管理版內的帖子、可管理版內的用戶等,這些是權限。
Yii2中對rbac的實現
1.Yii2實現了通用的分層的RBAC,遵循的模型也是NIST RBAC model。
2.在yii2中增加了rule規則的概念,rule是什么鬼呢?
舉個栗子:對于文章系統而言,我們有管理員和普通用戶,允許管理員對文章的任何操作,但是只允許普通用戶創建文章和修改自己創建的文章,也就是說普通用戶是有修改文章的權限的,但是額加的限制條件是只能修改自己的文章,這個額加的驗證工作就是rule規則所要負責的事情。
3.yii2的權限管理實現支持文件和db兩個載體,基于db實現方式的核心是四個表:
1)存儲角色或權限的表:auth_item (type:1表示 角色;2表示權限)
CREATE TABLE `auth_item` ( `name` varchar(64) NOT NULL, `type` int(11) NOT NULL, `description` text, `rule_name` varchar(64) DEFAULT NULL, `data` text, `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL, PRIMARY KEY (`name`), KEY `rule_name` (`rule_name`), KEY `type` (`type`), CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2) 權限和角色的上下級關聯表:auth_item_child
(包含關系:角色 可以包含 角色、角色 可以包含 權限、權限 可以包含 權限,但 權限 不可包含 角色)
CREATE TABLE `auth_item_child` ( `parent` varchar(64) NOT NULL, `child` varchar(64) NOT NULL, PRIMARY KEY (`parent`,`child`), KEY `child` (`child`), CONSTRAINT `auth_item_child_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `auth_item_child_ibfk_2` FOREIGN KEY (`child`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8
3)用戶與權限(角色)的分配表:auth_assignment
CREATE TABLE `auth_assignment` ( `item_name` varchar(64) NOT NULL, `user_id` varchar(64) NOT NULL, `created_at` int(11) DEFAULT NULL, PRIMARY KEY (`item_name`,`user_id`), CONSTRAINT `auth_assignment_ibfk_1` FOREIGN KEY (`item_name`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8
4)規則表:auth_rule
CREATE TABLE `auth_rule` ( `name` varchar(64) NOT NULL, `data` text, //存的是一個序列化的實現了yii\rbac\Rule接口的類的一個對象實例 `created_at` int(11) DEFAULT NULL, `updated_at` int(11) DEFAULT NULL, PRIMARY KEY (`name`), KEY `name` (`name`), KEY `created_at` (`created_at`), KEY `updated_at` (`updated_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='權限規則表';
以上是“yii2如何實現rbac”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。