доступ к страницам

всем привет

нужна помощь в оптимизации правил доступа к страницам сайта

условия такие

  1. Запрет доступа на весь сайт с определенного IP и переадресацией куда-нибудь

  2. На три метода – доступ для всех

  3. На один метод – доступ по паролю

  4. С определенного IP доступ строго на определенный экшн

вот что у меня получилось и работает как надо


public function behaviors()

{

    return [

        'access' => [

            'class' => AccessControl::className(),

            'rules' => [

                [

                    /*

                     * запрет и переадресация со всего сайта

                     * для определенного IP

                     */                        

                    'allow' => true,

                    'matchCallback' => function ($rule, $action) {

                        $userIP = Yii::$app->request->userIP;

                        if($userIP === '84.20.177.73')

                        {

                            return $this->redirect('http://yandex.ru');

                        }

                    }                        

                ], 

                [

                    /*

                     * для определенного IP

                     * принудительный редирект на один экшен

                     */                        

                    'allow' => true,

                    'matchCallback' => function ($rule, $action) {

                        $userIP = Yii::$app->request->userIP;

                        if($userIP === '84.20.177.72' AND Yii::$app->request->url != '/')

                        {

                            return $this->redirect('/');

                        }

                    }                        

                ],                             

                [

                    /*

                     * доступно всем

                     */

                    'actions' => ['index','about','login', 'signup'],

                    'allow' => true,

                ],

                [

                    /*

                     * доступно авторизованым

                     */                        

                    'actions' => ['contact', 'logout'],

                    'allow' => true,

                    'roles' => ['@'],

                ],                                         

            ],

        ],

    ];

}

можно ли сделать проще?