php – 只允许作者使用ACF在yii2中编辑他的帖子

前端之家收集整理的这篇文章主要介绍了php – 只允许作者使用ACF在yii2中编辑他的帖子前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用访问控制过滤器进行访问管理,但无法完成一件事 – 例如,我如何才能让项目经理更新项目并禁止其他人?我通过matchCallback尝试了它,但在这种情况下,所有项目经理都可以更新任何项目,因为返回了TRUE.

类似的更常用的规则 – 如何允许用户使用ACF更新/删除他是作者的帖子?

'access' => [
            'class' => AccessControl::className(),'only' => ['index','view','create','update','delete'],'rules' => [
                [
                    'actions' => ['update'],'allow' => true,'roles' => ['@'],'matchCallback' => function ($rule,$action) {

                        return Yii::$app->user->identity->getProjectParticipants()
                                    ->one()->isManager(Yii::$app->user->identity->id);
                    }
                ],],
它可以实现如下:
use Yii;
use yii\web\Controller;
use yii\filters\AccessControl;

class MyController extends Controller
{

...

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),'only' => ['update','rules' => [
                    [
                        'actions' => ['update',$action) {
                            if (Yii::$app->user->can('admin') || $this->isUserAuthor()) {
                                return true;
                            }
                            return false;
                        }
                    ],];
    }

    protected function findModel($id)
    {
        if (($model = MyModel::findOne($id)) !== null) {
            return $model;
        } else {
            throw new NotFoundHttpException('The requested page does not exist.');
        }
    }

    protected function isUserAuthor()
    {   
        return $this->findModel(Yii::$app->request->get('id'))->author->id == Yii::$app->user->id;
    }

...

}

猜你在找的PHP相关文章