当前位置: 首页 > 后端技术 > PHP

yii2框架权限管理的使用方法

时间:2023-03-30 06:01:13 PHP

ACF:AccessControlFilter访问控制过滤器(ACF)是yiifiltersAccessControl类实现的一种简单的授权方式。介绍它的用法:publicfunctionbehaviors(){return['access'=>['class'=>yii\filters\AccessControl::className(),'rules'=>[['allow'=>true,'actions'=>['创建','更新','查看','删除'],'角色'=>['@'],],['允许'=>真,'动作'=>['索引'],'角色'=>['?'],],],],];}rules:array访问规则对象列表或用于创建规则对象的配置数组。如果规则是通过配置数组指定的,它将在用于创建规则对象之前首先与[[ruleConfig]]合并。允许所有访问者(尚未经过身份验证的用户)执行索引操作。问号?角色选项中包含一个特殊标识符,代表“访客用户”。允许经过身份验证的用户执行创建更新视图删除操作。@是另一个特殊符号,代表“经过身份验证的用户”。基于角色的访问控制(RBAC)只是简单介绍了使用数据库来存储授权数据。在配置文件web.php中添加组件配置:'components'=>[......'authManager'=>['class'=>'yii\rbac\DbManager','itemTable'=>'auth_item','assignmentTable'=>'auth_assignment','itemChildTable'=>'auth_item_child',],]DbManager使用4个数据库表来存储它的数据:yiirbacDbManager::$itemTable:这个表存储授权条目(译者注:即,角色和权限)。默认表名是“auth_item”。yiirbacDbManager::$itemChildTable:该表存储授权项的层级关系。默认表名是“auth_item_child”。yiirbacDbManager::$assignmentTable:这个表存储授权项目给用户的分配。默认表名是“auth_assignment”。yiirbacDbManager::$ruleTable:这个表存储规则。默认表名是“auth_rule”。您需要在数据库中创建这些表。您可以使用存储在@yii/rbac/migrations目录中的数据库迁移文件来执行此操作。授权步骤如下:定义角色和权限建立角色和权限的关系定义规则将规则与角色和权限关联起来为用户分配角色具体实现如下代码:publicfunctionactionAccess(){$auth=Yii::$app->授权管理器;//创建代理权限$agentPermission=$auth->createPermission('agent');$agentPermission->description='创建代理操作权限。';$auth->add($agentPermission);//创建管理员角色$adminRole=$auth->createRole('admin');$adminRole->description='创建管理员角色。';$auth->add($adminRole);//给角色权限$auth->addChild($adminRole,$agentPermission);//给用户分配角色$userId=1;$auth->assign($adminRole,$userId);}授权完成后,可以进行controller请求执行前的权限判断。如下:publicfunctionbeforeAction($action){if(!parent::beforeAction($action)){returnfalse;}if(Yii::$app->user->can(Yii::$app->controller->id)){returntrue;}thrownew\yii\web\UnauthorizedHttpException('未授权查看');}Yii::$app->user->can($permissionName)传入权限的名字,yii会自动判断当前用户是否有这个权限,返回true或false。如果为真,则可以继续执行请求的方法。如果为false,我们可以做一些拦截,比如直接抛出异常。