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
我有一个包含许多控制器的 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