首頁 >php框架 >YII >yii2怎麼實作rbac

yii2怎麼實作rbac

(*-*)浩
(*-*)浩原創
2019-12-30 09:42:082034瀏覽

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的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn