在yii2.0.48中启用rbac需数据库初始化+代码配置双路径:先执行php yii migrate --migrationpath=@yii/rbac/migrations创建四张核心表,再配置authmanager组件及accesscontrol行为,最后通过rbaccontroller脚本创建权限、角色、分配关系并赋权用户。

在Yii2.0.48中为后台管理系统启用RBAC权限控制,防止未授权用户访问敏感操作接口(如删除用户、修改角色、导出数据),必须通过数据库初始化+代码配置双路径完成权限模型部署。
初始化数据库表结构
执行yii migrate命令自动创建auth_item、auth_item_child、auth_assignment、auth_rule四张核心表。这一步不可跳过,否则后续所有权限分配都将因缺少底层存储而报错“Table not found: auth_item”。
进入项目根目录,运行:php yii migrate --migrationPath=@yii/rbac/migrations。注意:迁移前请确认数据库配置正确且当前用户有建表权限,【迁移失败后不要手动补表,必须回滚并重试】。
配置应用组件与控制器行为
打开config/web.php,在components数组中注册rbac组件:
'authManager' => ['class' => 'yii\rbac\DbManager'],
在modules或controllerMap中确保后台控制器(如AdminController)继承yii\web\Controller,并在其behaviors()方法中添加AccessControl:
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['@'], ], ], ], ]; }
创建角色、权限并建立关联
新建命令行脚本commands/RbacController.php,内容如下:
① 实例化AuthManager:$auth = Yii::$app->authManager;
② 创建基础权限项(按业务动作粒度定义):$createUser = $auth->createPermission('user/create'); → $auth->add($createUser); → 同样添加'user/update'、'user/delete'、'role/assign'等共7项权限。
③ 创建角色:$admin = $auth->createRole('admin'); → $auth->add($admin); → 再创建'editor'和'viewer'角色。
④ 给角色分配权限:$auth->addChild($admin, $createUser); → 逐条绑定;注意'admin'角色必须包含'role/assign'权限,否则无法给其他用户指派角色。
⑤ 将用户ID(如1)赋予角色:$auth->assign($admin, 1);。这一步执行后,ID为1的用户即拥有全部admin权限。
在控制器中启用权限校验
在需要保护的控制器操作方法顶部添加注释标签:/** * @throws \yii\web\UnauthorizedHttpException */
在对应action中插入校验逻辑:if (!Yii::$app->user->can('user/delete')) { throw new ForbiddenHttpException('无权执行此操作'); }
更简洁的方式是使用filter:在behaviors()中追加规则,例如限制actionDelete仅允许具备'user/delete'权限的用户访问:
[ 'actions' => ['delete'], 'allow' => true, 'roles' => ['user/delete'], ]











