YII2 学习笔记-- RBAC

时间:2023-01-30 21:46:58
1、配置用户 MODEL 实现接口yii\web\IdentityInterface 2、配置文件
components=>[
'authManager' => [ //http://www.yiichina.com/doc/api/2.0/yii-rbac-dbmanager 'class' => 'yii\rbac\DbManager', ], 'user' => [ //http://www.yiichina.com/doc/api/2.0/yii-web-user // 指定用户模块的验证类 'identityClass' => 'api\models\Members', //这里关系到cookie自动登入,应该为false 'enableAutoLogin' => false, //这里是否开启session记录 'enableSession'=>false, 'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true], ], ]
3、在命令行下创建表 yii migrate --migrationPath=@yii/rbac/migrations 4、通过语句创建权限,RBAC 与用户的关联为 ID 关联角色。 $auth = Yii::$app->authManager; //创建权限 $default = $auth->createPermission('default'); $auth->add($default); //创建角色 $admin = $auth->createRole('admin'); $auth->add($admin); //权限和角色关联 $auth->addChild($admin,$default); //角色和用户关联 $auth->assign($admin,123); 5、RBAC 还可以增加 RULE 规则,需要实现 yii\rbac\Rule 的execute 方法
/** * @param string|integer $user 用户 ID. * @param Item $item 该规则相关的角色或者权限 * @param array $params 传给 ManagerInterface::checkAccess() 的参数,这里的参数通过 Yii::$app->user->can('xxx',[ 这里以数组方式传入 ]); *@return boolean 代表该规则相关的角色或者权限是否被允许 */publicfunctionexecute($user,$item,$params) { // 通过返回 true 或 false 来表示用户是否有权限returnisset($params['post']) ? $params['post']->createdBy == $user :false; }
6、通过 revoke 方法删除用户与权限关联 $auth = Yii::$app->authManager; $admin = $auth->createRole('admin'); $auth->revoke($admin,123);