yii2如何实现rbac-创新互联

小编给大家分享一下yii2如何实现rbac,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

十载的武夷山网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整武夷山建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“武夷山网站设计”,“武夷山网站推广”以来,每个客户项目都认真落实执行。

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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


分享文章:yii2如何实现rbac-创新互联
文章起源:http://myzitong.com/article/dsghps.html