Открыть доступ к методу api

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
nds
Сообщения: 6
Зарегистрирован: 2017.09.05, 07:57

Открыть доступ к методу api

Сообщение nds » 2019.05.04, 20:40

Возможно-ли в yii2 при использовании аутентификатора, открыть доступ к какому-либо методу(-ам)(в моем случае actionParents) для неаутентифицированного пользователя

Код: Выделить всё

namespace app\modules\api\controllers;


use app\models\Department;
use app\models\User;
use yii\data\ActiveDataProvider;
use yii\filters\AccessControl;
use yii\filters\auth\HttpBasicAuth;
use yii\rest\ActiveController;

class DepartmentController extends ActiveController
{
    public $modelClass = 'app\models\Department';

    public function behaviors()
    {
        return array_merge(parent::behaviors(), [
            'basicAuth' => [
                'class' => HttpBasicAuth::class,
                'auth' => function ($u, $p) {
                    $user = User::findOne(['username' => $u]);
                    return $user->validatePassword($p) ? $user : null;
                }
            ],
            'access' => [
                'class' => AccessControl::class,
                'only' => ['parents'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['parents'],
                        'roles' => ['?'], // тут как бы должно произойти чудо, но нет
                    ],
                ]
            ],
        ]);
    }

    public function actionParents($id)
    {
        return new ActiveDataProvider([
            'query' => Department::find()->parents($id)
        ]);
    }
}
Сейчас неаутентифицированный пользователь получает:

Код: Выделить всё

{
    "name": "Unauthorized",
    "message": "Your request was made with invalid credentials.",
    "code": 0,
    "status": 401,
    "type": "yii\\web\\UnauthorizedHttpException"
}

Аватара пользователя
leonenco
Сообщения: 120
Зарегистрирован: 2017.01.30, 22:42

Re: Открыть доступ к методу api

Сообщение leonenco » 2019.05.18, 04:52

Скорей всего у вас закрывает доступ в модуле до рендера контроллера, соответственно нужно либо в классе модуля прописавать, что имеют досту все и потом фильтровать в каждом контроллере, либо в основном конфиге.

Аватара пользователя
leonenco
Сообщения: 120
Зарегистрирован: 2017.01.30, 22:42

Re: Открыть доступ к методу api

Сообщение leonenco » 2019.06.05, 08:18

Вы наследуйтесь от ActiveController! Вы всегда можете переписать метод родителя (если он не private protected) и добавить этот метод в AccessControl для не аутентифицированных пользователей.

Ответить