Yii2 Разрешить доступ только к указанным c контроллерам и ограничить доступ к другому контроллеру - PullRequest
0 голосов
/ 27 мая 2020

У меня есть расширенный проект yii2 со множеством контроллеров, я хочу, чтобы только некоторые контроллеры были доступны пользователям и блокировали доступ к другим контроллерам. Используя контроль доступа, я могу установить правила для действий, но не контроллеры, любые предложения, пожалуйста

1 Ответ

1 голос
/ 28 мая 2020

Существует несколько типов конфигураций:

1) Блокировать доступ ко всему приложению (так называемому бэкэнду) с помощью основной конфигурации:

// ../config/main.php
return [
    // ...
    'components' => [
         // ...
    ],
    'as access' => [
        'class' => yii\filters\AccessControl::class,
        'except' => ['site/error', 'site/login', 'site/logout'],
        'rules' => [
            ['allow' => true, 'roles' => ['@']],
        ],
    ],
];

2) Блокировать доступ к определенным c контроллерам путем расширения абстрактного класса контроллера

use yii\filters\AccessControl;
use yii\web\Controller;

/**
 *  AbstractSecured controller
 */
abstract class AbstractSecuredController extends Controller
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                // ...
                // rules
            ]
        ];
    }
}

Теперь вы можете расширить этот контроллер в своих контроллерах

use yii\helpers\ArrayHelper;

/**
 * MyNonPublic controller
 */
class MyNonPublicController extends AbstractSecuredController
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return ArrayHelper::merge(
            parent::behaviors(),
            [
                // ...
                // controller specific behaviors
                // you can even rewrite access behavior config
            ]
        );
    }
}

3) Вы также можете настроить ACL

...