Yii2框架基于user表positions字段设置admin专属文件上传权限问题
解决方案
你可以通过Yii2权限控制规则的matchCallback参数自定义权限判断逻辑,直接读取当前登录用户的positions字段值做校验即可,修改后的behaviors配置如下:
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::class, 'only' => ['upload'], 'rules' => [ [ 'allow' => true, 'roles' => ['@'], // 先限制仅已登录用户可访问 'matchCallback' => function ($rule, $action) { // 校验当前登录用户positions字段是否为admin return Yii::$app->user->identity->positions === 'admin'; }, // 可选:配置权限不足时的响应逻辑 'denyCallback' => function ($rule, $action) { // 接口请求可返回json响应 return $this->asJson(['code' => 403, 'msg' => '无上传操作权限']); // 页面请求可直接跳转:return $this->redirect(['site/index']); } ], ], ], ]; }
注意事项
- 请确保你的User身份类已正确实现
IdentityInterface,登录后Yii::$app->user->identity可以正常获取到用户表的所有字段数据 - 如果
positions字段可能存在空值等异常情况,建议增加判空逻辑避免报错:
'matchCallback' => function ($rule, $action) { $identity = Yii::$app->user->identity; return $identity && isset($identity->positions) && $identity->positions === 'admin'; },
内容的提问来源于stack exchange,提问作者Habib Rifqi16
相关产品推荐
相关产品推荐

