溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

yii2如何實(shí)現(xiàn)rbac

發(fā)布時(shí)間:2021-01-13 14:45:14 來源:億速云 閱讀:163 作者:小新 欄目:編程語言

小編給大家分享一下yii2如何實(shí)現(xiàn)rbac,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

RBAC(Role-Based Access Control )基于角色的訪問控制。

1.基本思想:在用戶和訪問權(quán)限之間引入角色的概念,將用戶和角色聯(lián)系起來,通過對角色的授權(quán)來控制用戶對系統(tǒng)資源的訪問,相對傳統(tǒng)訪問控制 引入角色極大地簡化了權(quán)限的管理。                               (推薦學(xué)習(xí):yii框架)

1).角色:可以理解為一定數(shù)量的權(quán)限的集合,權(quán)限的載體。例如:一個(gè)論壇系統(tǒng),“超級管理員”、“版主”都是角色。

2).權(quán)限:版主可管理版內(nèi)的帖子、可管理版內(nèi)的用戶等,這些是權(quán)限。

Yii2中對rbac的實(shí)現(xiàn)

1.Yii2實(shí)現(xiàn)了通用的分層的RBAC,遵循的模型也是NIST RBAC model。

2.在yii2中增加了rule規(guī)則的概念,rule是什么鬼呢?

舉個(gè)栗子:對于文章系統(tǒng)而言,我們有管理員和普通用戶,允許管理員對文章的任何操作,但是只允許普通用戶創(chuàng)建文章和修改自己創(chuàng)建的文章,也就是說普通用戶是有修改文章的權(quán)限的,但是額加的限制條件是只能修改自己的文章,這個(gè)額加的驗(yàn)證工作就是rule規(guī)則所要負(fù)責(zé)的事情。

3.yii2的權(quán)限管理實(shí)現(xiàn)支持文件和db兩個(gè)載體,基于db實(shí)現(xiàn)方式的核心是四個(gè)表:

1)存儲角色或權(quán)限的表:auth_item (type:1表示 角色;2表示權(quán)限)

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) 權(quán)限和角色的上下級關(guān)聯(lián)表:auth_item_child

(包含關(guān)系:角色 可以包含 角色、角色 可以包含 權(quán)限、權(quán)限 可以包含 權(quán)限,但 權(quán)限 不可包含 角色)

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)用戶與權(quán)限(角色)的分配表: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)規(guī)則表:auth_rule

CREATE TABLE `auth_rule` (  
  `name` varchar(64) NOT NULL,  
  `data` text,  //存的是一個(gè)序列化的實(shí)現(xiàn)了yii\rbac\Rule接口的類的一個(gè)對象實(shí)例
  `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='權(quán)限規(guī)則表';

以上是“yii2如何實(shí)現(xiàn)rbac”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI