yii2我只允许索引动作

wsewodh2  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(110)

我尝试使用behaviors()函数只允许索引操作,但现在它也被拒绝了

任何人都可以解决并解释规则返回。

<?php

namespace api\modules\v1\controllers;

use yii\rest\ActiveController;
use yii\filters\AccessControl;

/**
 * Doctor Controller API
 */
class DoctorController extends ActiveController
{
    public $modelClass = 'api\modules\v1\models\Doctor';

    public function behaviors()
    {
        return [
            'access' => [
                'class' => \yii\filters\AccessControl::className(),
                'only' => ['index'],
                'rules' => [
                    [
                        'allow' => false,
                        'verbs' => ['POST']
                    ],
                    [
                        'allow' => true,
                        'actions' => ['index'],
                        'verbs' => ['GET'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    // everything else is denied
                ],
            ],
        ];
    }
}
q43xntqr

q43xntqr1#

我阅读了文件才知道
通过重写原始访问行为,它将决定任何未提及的行为为允许的。
因此,您只需要一个允许操作的规则,而不需要强制动词或角色,但是如果您想更多地限制它,您可以这样做。

<?php

namespace api\modules\v1\controllers;

use Yii;
use api\modules\v1\models\Doctor;
use yii\rest\ActiveController;

/**
 * Doctor Controller API
 */
class DoctorController extends ActiveController
{
    public $modelClass = 'api\modules\v1\models\Doctor';

    public function behaviors()
    {

        $behaviors = parent::behaviors();

        $behaviors['access'] = [
            'class' => \yii\filters\AccessControl::className(),
            'rules' => [
                [
                    // All actions
                    'allow' => true,
                    'actions' => ['index'],
                ],
            ],
        ];

        return $behaviors;
    }

}

相关问题