developeruz / yii2-db-rbac

Dynamic control of access rights in YII2
MIT License
110 stars 33 forks source link

Как делать редирект или выдавать Нормальное уведомление? #21

Closed i-coder closed 9 years ago

i-coder commented 9 years ago

Если допустим сессия умерла то вылетает исключение с ошибками

An Error occurred while handling another error: exception 'yii\web\BadRequestHttpException' with message 'Не достаточно прав'

и много текста, как можно заменить? этот текст или делать редирект?

developeruz commented 9 years ago

Если прав нет, модуль кидает исключение (exception), дальше ВАШЕ приложение должно это исключение обработать, так как нужно в вашем конкретном случаи. Сообщение что вы получаете говорит о том, что произошла ошибка при обработке исключения (exception). Скорее всего у вас не настроен errorAction или у не авторизованного пользователя к нему тоже нет прав. Решение: 1 - дать доступ к errorAction прописав разрешение на него в конфиге 2 - настроить обработку ошибок, чтобы при такой-то ошибке редиректило туда-то. Посмотрите вот этот класс, в качестве примера: https://github.com/developeruz/yii2-custom-errorhandler PS: судя по тому, что у вас все еще BadRequestHttpException, у вас не самая новая версия модуля, обновитесь ;)

i-coder commented 9 years ago

1 - дать доступ к errorAction прописав разрешение на него в конфиге -? где?как? подскжите! 2 - настроить обработку ошибок, чтобы при такой-то ошибке редиректило туда-то. - обновить вы про composer update?

developeruz commented 9 years ago

Да, про composer update думаю решит вашу проблему (т.к баг был, но уже исправлен в сентябре этого года)

i-coder commented 9 years ago

Сделал как вы описали выше но не получается((

developeruz commented 9 years ago

Проверяйте по шагам: 1 - убедитесь что у вас самая последняя версия модуля: в composer.json должно быть "developeruz/yii2-db-rbac": "1.0.8", Если нет, пропишите последнюю и запустили composer update 2 - убедитесь что у вас в конфиге есть компонент errorHandler 'errorHandler' => [ 'errorAction' => 'site/error', ], 3 - убедитесь, что в site/error (или что у вас прописано в конфиге) обрабатывает ошибки (или делегирует это стандартному ErrorAction). Т.е в контроллере должно быть: public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ] ]; }

Если это все есть, но ошибка остается - пришлите скриншот страницы ошибок.

developeruz commented 9 years ago

Вот ваш-же вопрос и коммит с фиксом этого бага: https://github.com/developeruz/yii2-db-rbac/issues/11

i-coder commented 8 years ago

Добрый вечер - ВОТ ВСЕ проверил ну не помогает ничего сделать (( немогу сделать свой вывод ошибки http://joxi.ru/Y2LpqqwSnwdgv2

mrbighokage commented 8 years ago

Скорей всего у вас нет доступа до страници с ошибкой проверьте правила для екшна error

i-coder commented 8 years ago

немного непонял насчет правила для екшена ??

i-coder commented 8 years ago

честно ищу нормальную документацию )) честно у же как то подбешивает что данный модуль ведет себя как вздумается вот допустим натянул тему AdmLTE все данный модуль авторизации ведет себя неадыкватно (( вроде пытаюсь все сначала поставить ставлю настраиваю даю правила вешаю на роль все пользователю далю роль пытаюсь авторизироваться (у вас недостаточно прав)... и везде по разному ведет себя модуль

i-coder commented 8 years ago

Как я настраиваю 1 - установил через композер версию "developeruz/yii2-db-rbac": "1.0.8", 2- лезу в можуль User прописываю use developeruz\db_rbac\interfaces\UserRbacInterface; class User extends ActiveRecord implements IdentityInterface,UserRbacInterface 3 - Лезу в контрол допустим SiteController делаю там use developeruz\db_rbac\behaviors\AccessBehavior; public function behaviors() { return [ 'as AccessBehavior' => [ 'class' => AccessBehavior::className(), ] ]; } public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ], ]; }

4 - Ида создаю роль + правила и цепляю на пользователя - все это средствами через админку модуля (permit) 5 - пробую .... не пашет реально уже не в первый раз замечаю что модуль когда захочет тогда и заработает ... на одном проекте БАТЦ заработал ))) среьезно ЧТО Я НЕ ТАК ДЕЛАЮ?!?!

developeruz commented 8 years ago

По скриншоту: запускается "yii/base/Controller->runAction('', Array)" - и доступа к нему нет. Модуль бросает Exсeption. В самом приложении срабатывает defaulRoute. Контроллер, когда вызывают пустой action, вызывает index. А модуль проверяет "буква в букву" и доступа к ""(пусто) нет ни у какого пользователя. Что делать? Попробуйте прописать в rules компонента urlManager '/' => 'site/index', т.е явно вызывать actionIndex Для обработки Exception вызывается site/error и к нему у пользователя тоже нет доступа. Пропишите доступ туда в конфиге и когда будите копипастить в другой проект, про это тоже сразу вспомните:

'as AccessBehavior' => [
'class' => AccessBehavior::className(),
'rules' =>
            ['site' =>
                [
                    [
                        'actions' => ['error', 'index'],
                        'allow' => true,
                    ],
                ]
             ]
]

AdmLTE, как и любые CSS стили, JSкод (кроме ajax запросов) и верстка никак не влияют на работу модуля (если вы тему ставите ввиде yii-модуля, то все возможно). Вы действительно считаете, что один и тот-же код может "работать по настроению"? Вы точно программист? :)

developeruz commented 8 years ago

Кстати, таким образом (через конфиг), можете давать доступ ко всем "проблемным" action, а права доступа прописывать обычным способом в контроллере (через AccessControl), при этом спокойно использовать роли из модуля. Это сбережет вам нервы там, где настроить модуль правильно не получается.

i-coder commented 8 years ago

ну если бы я не был программистом "Вы точно программист? :)" я бы не писал бы вам об ошибках в вашем модуле и как их исправлять.