Перехват исключений

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
pochchta
Сообщения: 17
Зарегистрирован: 2020.07.15, 09:28

Перехват исключений

Сообщение pochchta »

Для ознакомления установил расширение для работы с RBAC DB:
https://github.com/developeruz/yii2-db-rbac
Ограничил доступ для одного action.
Если зайти на этот action с недостаточными правами, генерируется ForbiddenHttpException, но не перехватывается и показывается только этот текст ниже. В какую сторону копать, подскажите, пожалуйста.
Адрес site/error открывается.
Режим разработки включен, если выключить будет только одна строчка текста.

Код: Выделить всё

An Error occurred while handling another error:
yii\web\ForbiddenHttpException: Недостаточно прав in A:\OSPanelWinXP\domains\yii.loc\vendor\developeruz\yii2-db-rbac\behaviors\AccessBehavior.php:84
Stack trace:
#0 [internal function]: developeruz\db_rbac\behaviors\AccessBehavior->interception(Object(yii\base\ActionEvent))
#1 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Component.php(627): call_user_func(Array, Object(yii\base\ActionEvent))
#2 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Module.php(700): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#3 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Controller.php(145): yii\base\Module->beforeAction(Object(yii\web\ErrorAction))
#4 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('error', Array)
#5 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\web\ErrorHandler.php(109): yii\base\Module->runAction('site/error')
#6 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\ErrorHandler.php(123): yii\web\ErrorHandler->renderException(Object(yii\web\ForbiddenHttpException))
#7 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\ForbiddenHttpException))
#8 {main}
Previous exception:
yii\web\ForbiddenHttpException: Недостаточно прав in A:\OSPanelWinXP\domains\yii.loc\vendor\developeruz\yii2-db-rbac\behaviors\AccessBehavior.php:84
Stack trace:
#0 [internal function]: developeruz\db_rbac\behaviors\AccessBehavior->interception(Object(yii\base\ActionEvent))
#1 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Component.php(627): call_user_func(Array, Object(yii\base\ActionEvent))
#2 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Module.php(700): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#3 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Controller.php(145): yii\base\Module->beforeAction(Object(yii\base\InlineAction))
#4 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('about', Array)
#5 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('site/about', Array)
#6 A:\OSPanelWinXP\domains\yii.loc\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#7 A:\OSPanelWinXP\domains\yii.loc\web\index.php(12): yii\base\Application->run()
#8 {main}
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Перехват исключений

Сообщение samdark »

А что вы хотели чтобы там было?
pochchta
Сообщения: 17
Зарегистрирован: 2020.07.15, 09:28

Re: Перехват исключений

Сообщение pochchta »

Изображение
Если ограничить права стандартным средством, то отображается страница https://ibb.co/LNZFXgH

Логи "правильного отображения ошибки":
https://ibb.co/CQpmGYx
"неправильного":
https://ibb.co/9T2s26m

https://github.com/developeruz/yii2-db- ... 0%BF%D0%B0
По умолчанию, при отсутствии у пользователя доступа, поведение бросает ForbiddenHttpException, который может обрабатываться приложением так как ему нужно.
У меня исключение не обрабатывается.

Код: Выделить всё

// так я ограничил доступ в контроллер auth-assignment в нем самом стандартным средством
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['admin'],
                    ],
                ],
            ],

// так я ограничил доступ в site/about в web.php
     'as AccessBehavior' => [
        'class' => \developeruz\db_rbac\behaviors\AccessBehavior::className(),
        'protect' => ['site/about'],
    ],
Ответить