广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买
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的详细内容,更多请关注9543建站博客其它相关文章!
发表评论