yii2权限管理
来源:互联网 发布:自学网c语言 编辑:程序博客网 时间:2024/06/07 18:29
ACF:存取控制过滤器
存取控制过滤器(ACF)是一种通过 yii\filters\AccessControl 类来实现的简单授权方法。
介绍其使用:
public function behaviors() { return [ 'access' => [ 'class' => yii\filters\AccessControl::className(), 'rules' => [ [ 'allow' => true, 'actions' => ['create', 'update', 'view', 'delete'], 'roles' => ['@'], ], [ 'allow' => true, 'actions' => ['index'], 'roles' => ['?'], ], ], ], ]; }
- rules:array a list of access rule objects or configuration arrays for creating the rule objects.
- If a rule is specified via a configuration array, it will be merged with [[ruleConfig]] first
- before it is used for creating the rule object.
- 允许所有访客(还未经认证的用户)执行 index 操作。 roles 选项包含的问号 ? 是一个特殊的标识,代表”访客用户”。
允许已认证用户执行 create update view delete操作。@是另一个特殊标识, 代表”已认证用户”。
基于角色的存取控制 (RBAC)
只简单介绍使用数据库存放授权数据
在配置文件web.php中添加component配置:
'components' => [ ...... 'authManager' => [ 'class' => 'yii\rbac\DbManager', 'itemTable' => 'auth_item', 'assignmentTable' => 'auth_assignment', 'itemChildTable' => 'auth_item_child', ],]
DbManager 使用4个数据库表存放它的数据:
- yii\rbac\DbManager::$itemTable: 该表存放授权条目(译者注:即角色和权限)。默认表名为 “auth_item” 。
- yii\rbac\DbManager::$itemChildTable: 该表存放授权条目的层次关系。默认表名为 “auth_item_child”。
- yii\rbac\DbManager::$assignmentTable: 该表存放授权条目对用户的指派情况。默认表名为 “auth_assignment”。
yii\rbac\DbManager::$ruleTable: 该表存放规则。默认表名为 “auth_rule”。
你需要在数据库中创建这些表。你可以使用存放在 @yii/rbac/migrations 目录中的数据库迁移文件来做这件事。
授权步骤如下:定义角色和权限
- 建立角色和权限的关系
- 定义规则
- 将规则与角色和权限作关联
指派角色给用户
具体实现如下代码:
public function actionAccess() { $auth = Yii::$app->authManager; //创建agent权限 $agentPermission = $auth->createPermission('agent'); $agentPermission->description = 'create agent operate permission.'; $auth->add($agentPermission); //创建admin角色 $adminRole = $auth->createRole('admin'); $adminRole->description = 'create admin role.'; $auth->add($adminRole); //将权限赋予角色 $auth->addChild($adminRole, $agentPermission); //将角色赋予用户 $userId = 1; $auth->assign($adminRole, $userId); }
授权结束后就可以进行控制器请求执行前的权限判断了。如下:
public function beforeAction($action) { if (!parent::beforeAction($action)) { return false; } if (Yii::$app->user->can(Yii::$app->controller->id)) { return true; } throw new \yii\web\UnauthorizedHttpException('无权查看'); }
Yii::$app->user->can($permissionName)传入权限的名称,yii会自动去判断当前用户是否具有这种权限,返回true或false。如果为true就可以继续执行请求的方法了。如果为false,我们可以做一些拦截,比如直接抛出异常。
参考:Yii2.0授权指南
http://www.yiichina.com/doc/guide/2.0/security-authorization
0 0
- yii2权限管理
- Yii2权限管理之ACF
- Yii2-admin RBAC权限管理的实现
- Yii2-admin RBAC权限管理的实现
- Yii2-rbac权限基础--菜单menu管理
- Yii2-admin RBAC权限管理的实现
- yii2 rbac权限管理学习笔记
- 浅谈Yii2中rbac的权限管理
- Yii2全面解析之权限管理RBAC
- Yii2框架管理后台权限设置机制
- Yii2-rbac权限基础--权限管理的实现
- yii2高级模板借助于yii2-admin&yii2-adminlte-asset的RBAC权限管理
- yii2-rbac权限设置
- FEC ADMIN : Yii2 扩展 DWZ UI 整合 - composer 安装 - 账户管理,菜单管理,权限管理,日志缓存管理
- Yii2 菜单menu管理
- Yii2 实例管理
- yii2-rbac及yii2-admin可视化管理
- yii2.0 rbac权限控制
- 贪心——Happy Line (CodeForces 549G)
- websocket 心跳包重连
- js获得昨天、今天、明天等时间
- debug and release
- halcon各章节归纳
- yii2权限管理
- LeetCode 371 Sum of Two Intergers
- Spring+Websocket实现消息的推送
- Selenium多层级的iframe中元素的定位
- CF 610B Vika and Squares
- Fragment 生命周期的问题
- 【NFC】NFC概述及认证
- 使用awk合并文件及脚本解析
- 浅谈 JSON.stringify 方法