по Url получить namespace контроллера и название action

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: по Url получить namespace контроллера и название action

Сообщение zelenin »

зачем это все, если есть rbac?
"ха" потому что я выше сказал, что надо сначала было поинтересоваться в причинах маргинальности, а потом уже создавать ветку из 20ти сообщений. И выясняется, что человек пересоздает rbac, причем коряво.
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: по Url получить namespace контроллера и название action

Сообщение de1phi »

У меня портированная rights с первой версии. По управлению очень удобно. Осталось сделать видимость кнопок и ссылок
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: по Url получить namespace контроллера и название action

Сообщение zelenin »

de1phi писал(а):У меня портированная rights с первой версии. По управлению очень удобно. Осталось сделать видимость кнопок и ссылок
это все делает rbac
Последний раз редактировалось zelenin 2014.12.25, 12:49, всего редактировалось 1 раз.
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: по Url получить namespace контроллера и название action

Сообщение de1phi »

zelenin писал(а):
de1phi писал(а):У меня портированная rights с первой версии. По управлению очень удобно. Осталось сделать видимость кнопок и ссылок
это все делает rbac'ом
Могли бы привести пример как с помощью rbac проверить видимость кнопки
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: по Url получить namespace контроллера и название action

Сообщение zelenin »

de1phi писал(а):
zelenin писал(а):
de1phi писал(а):У меня портированная rights с первой версии. По управлению очень удобно. Осталось сделать видимость кнопок и ссылок
это все делает rbac'ом
Могли бы привести пример как с помощью rbac проверить видимость кнопки

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

<?= (Yii::$app->user->can('viewButton') ? Html::button() : '') ?>
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: по Url получить namespace контроллера и название action

Сообщение de1phi »

Ну так это требует редактирование всех вьюшек и кнопок в гридах и т.д.
У меня есть список action'ов, есть список ролей. Проще перегрузить метод отрисовки кнопки (добавить универсальную проверку на доступность), чем лопатить каждую view
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: по Url получить namespace контроллера и название action

Сообщение zelenin »

de1phi писал(а):Ну так это требует редактирование всех вьюшек и кнопок в гридах и т.д.
У меня есть список action'ов, есть список ролей. Проще перегрузить метод отрисовки кнопки (добавить универсальную проверку на доступность), чем лопатить каждую view
так перегрузите. там же все равно нужно использовать метод проверки. а это делает rbac.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: по Url получить namespace контроллера и название action

Сообщение zelenin »

не важно ГДЕ вы будете делать проверку. важно КАК.
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: по Url получить namespace контроллера и название action

Сообщение de1phi »

zelenin писал(а):не важно ГДЕ вы будете делать проверку. важно КАК.
мне важно определить, какой action будет выполнен по ссылке и проверить есть ли доступ у пользователя.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: по Url получить namespace контроллера и название action

Сообщение zelenin »

de1phi писал(а):
zelenin писал(а):не важно ГДЕ вы будете делать проверку. важно КАК.
мне важно определить, какой action будет выполнен по ссылке и проверить есть ли доступ у пользователя.
я понял. почему нельзя использовать rbac? почему стандартный механизм вам не подходит? почему нельзя дать человеку разрешение (permission) и проверять его перед рендером кнопки или открытием экшна? Зачем надо делать то же самое, только извращенным и негибким методом?
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: по Url получить namespace контроллера и название action

Сообщение de1phi »

zelenin писал(а):
de1phi писал(а):
zelenin писал(а):не важно ГДЕ вы будете делать проверку. важно КАК.
мне важно определить, какой action будет выполнен по ссылке и проверить есть ли доступ у пользователя.
я понял. почему нельзя использовать rbac? почему стандартный механизм вам не подходит? почему нельзя дать человеку разрешение (permission) и проверять его перед рендером кнопки или открытием экшна? Зачем надо делать то же самое, только извращенным и негибким методом?
да используется почти стандартный механизм, только в качестве имен permission'ов используется вид controllerNamespace::actionName. Это позволяет автоматически генерировать permission'ы,а не забивать их вручную, тем более это точно гарантирует, что они все будут различные Далее зачем перед каждым выводом мне делать проверку вручную, когда можно это делать автоматически при прорисовке ссылки?
Аватара пользователя
Insolita
Сообщения: 788
Зарегистрирован: 2011.06.06, 01:39
Контактная информация:

Re: по Url получить namespace контроллера и название action

Сообщение Insolita »

ну а как например с вариантами - когда модератор по одному и тому же контроллер\акшн может редактировать и удалять только свои посты\новости... или например - общая таблица комментов - один модер должен мочь работать с комментами к статьям, другой с комментами к новостям - то бишь уровень Rule в rbac вы полностью игнорируете
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: по Url получить namespace контроллера и название action

Сообщение de1phi »

Insolita писал(а):ну а как например с вариантами - когда модератор по одному и тому же контроллер\акшн может редактировать и удалять только свои посты\новости... или например - общая таблица комментов - один модер должен мочь работать с комментами к статьям, другой с комментами к новостям - то бишь уровень Rule в rbac вы полностью игнорируете
у меня перегружен dbmanager и rule используются. Да и мы вроде тут не об этом
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: по Url получить namespace контроллера и название action

Сообщение maleks »

Insolita писал(а): кстати проверила - и такая фигня - если урл генерить относительный через Yii::$app->urlManager->createUrl - то отрабатывает, а если createAbsoluteUrl - то не отрабатывает - не возвращает resolve()
Вы не поняли вопрос. urlManager тут вообще не причем, проверка идет ведь для внутреннего роута.
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: по Url получить namespace контроллера и название action

Сообщение de1phi »

в итоге вот

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

    public static function a($text, $url = null, $options = []) {
        $request = new Request;
        $request->setUrl(Url::to($url));

        $resolve = $request->resolve();
        if($resolve) {
            $parts = Yii::$app->createController($resolve[0]);
            if (is_array($parts)) {
                /* @var $controller Controller */
                list($controller, $actionID) = $parts;
                if($actionID == '') {
                    $actionID = $controller->defaultAction;
                }
                $permission = get_class($controller) . '::' . 'action' . ucfirst($actionID);

                if(Yii::$app->user->can($permission)) {
                    return parent::a($text, $url, $options);
                } 
            }
        }
    } 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: по Url получить namespace контроллера и название action

Сообщение zelenin »

а спорил-то... все равно используешь тот же rbac, только разрешения задаешь именами контроллера-экшна, а не более абстрактными пермишнами. Менее гибко.
10 кнопок у тебя создадут 10 объектов реквеста и 10 объектов контроллеров.
причем профит только один - имя пермишна генерится автоматически, что позволяет проверку перенести в метод генерации ссылки.
Ответить