yii2怎么实现rbac
时间:2019-12-30 09:42
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的详细内容,更多请关注gxlsystem.com其它相关文章!