您好,欢迎访问一九零五行业门户网

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的详细内容。
其它类似信息

推荐信息