Yii2 只允许访问特定控制器并限制对其他控制器的访问

Yii2 Allow access to only specific controllers and restrict access to other controller

我有一个包含许多控制器的 yii2 高级项目,我希望用户只能访问一些控制器并阻止对其他控制器的访问。 使用访问控制我可以为操作设置规则但不能为控制器设置规则,请提出任何建议

配置类型很少:

1) 使用主配置阻止对整个应用程序(ak 后端)的访问:

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

2) 通过扩展抽象控制器来阻止对特定控制器的访问class

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