为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
明月笑刀无情 2023-04-21 15:05:32
我有一个包含许多控制器的 yii2 高级项目,我只希望用户可以访问某些控制器并阻止对其他控制器的访问。使用访问控制我可以为操作设置规则但不能为控制器设置规则,请提出任何建议
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超5个赞

有几种类型的配置:


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)通过扩展抽象控制器类来阻止对特定控制器的访问


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


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信