rbac куда делся biz_rule ?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

rbac куда делся biz_rule ?

Сообщение nepster »

Обновил вчера все это дело и заметил новую структура таблиц rbac.

Добавилась новая таблица и исчезла колонка biz_rule.

Как теперь для определенных ролей делать вот такие вещи ?

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

return Yii::$app->user->identity->role=="administrator";
return Yii::$app->user->identity->role=="user";
return Yii::$app->user->identity->role=="guest"; 
И зачем добавилась новая таблица ? Объясните вкратце пожалуйста. (просьба на бургоисточники не посылать)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: rbac куда делся biz_rule ?

Сообщение slavcodev »

Официальная документация является "бургоисточником"?
https://github.com/yiisoft/yii2/blob/ma ... ization.md

Правила теперь идут отдельным классом.
Жду Yii 3!
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: rbac куда делся biz_rule ?

Сообщение nepster »

ну да, тут же русское сообщество все же.
Ждать перевода не вариант, вот попросил в 2 словах объяснить.
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: rbac куда делся biz_rule ?

Сообщение yan »

https://github.com/yiisoft/yii2/blob/ma ... sing-rules
круто навернули, бизнес правила в строках как в первой версии это конечно тихий ужас, но отдельный класс под каждое правило тоже как-то слишком курчаво :)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: rbac куда делся biz_rule ?

Сообщение zelenin »

yan писал(а):https://github.com/yiisoft/yii2/blob/ma ... sing-rules
круто навернули, бизнес правила в строках как в первой версии это конечно тихий ужас, но отдельный класс под каждое правило тоже как-то слишком курчаво :)
предложите другой вариант?
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: rbac куда делся biz_rule ?

Сообщение yan »

zelenin писал(а):
yan писал(а):https://github.com/yiisoft/yii2/blob/ma ... sing-rules
круто навернули, бизнес правила в строках как в первой версии это конечно тихий ужас, но отдельный класс под каждое правило тоже как-то слишком курчаво :)
предложите другой вариант?
чтобы предложить надо детально изучить как в целом эти система реализована, я же пока на первой версии сижу и глубоко во вторую не погружался, когда прикидывал как лучше было это реализовать по сравнению с первой версией (вторая тогда еще была в зачатке), приходила мысль об общем классе включающем все бизнес правила в виде отдельных методов, названия которых или сформированны по определенным правилам или определяются каким-то массивом соответствий.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: rbac куда делся biz_rule ?

Сообщение zelenin »

yan писал(а):
zelenin писал(а):
yan писал(а):https://github.com/yiisoft/yii2/blob/ma ... sing-rules
круто навернули, бизнес правила в строках как в первой версии это конечно тихий ужас, но отдельный класс под каждое правило тоже как-то слишком курчаво :)
предложите другой вариант?
чтобы предложить надо детально изучить как в целом эти система реализована, я же пока на первой версии сижу и глубоко во вторую не погружался, когда прикидывал как лучше было это реализовать по сравнению с первой версией, приходила мысль об общем классе включающем все бизнес правила в виде отдельных методов, названия которых или сформированны по определенным правилам или определяются каким-то массивом соответствий.
ну так и сделано, только вместо функции класс, что удобнее
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: rbac куда делся biz_rule ?

Сообщение yan »

zelenin писал(а): ну так и сделано, только вместо функции класс, что удобнее
возможно при использовании покажется удобным, но на первый взгляд раскидывать по отдельным классам простейшие куски кода, которыми обычно являются эти бизнес правила, представляется несколько не рационально.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: rbac куда делся biz_rule ?

Сообщение zelenin »

yan писал(а):
zelenin писал(а): ну так и сделано, только вместо функции класс, что удобнее
возможно при использовании покажется удобным, но на первый взгляд раскидывать по отдельным классам простейшие куски кода, которыми обычно являются эти бизнес правила, представляется несколько не рационально.
а если не простейшие?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: rbac куда делся biz_rule ?

Сообщение zelenin »

но на самом деле можно наверное и анонимные функции туда запилить. Будет действительно удобно.
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: rbac куда делся biz_rule ?

Сообщение yan »

zelenin писал(а): а если не простейшие?
В большинстве случаев они все таки будут простейшими, если не простейшие возможно логику стоит вынести в соответствующий класс (например класс сущности к которой определяем доступ), а в правиле сделать только вызов метода - так по крайней мере в первой версии делал.
Единственное на мой взгляд когда действительно полезна такая организация - если вдруг понадобится какое-то комплексное сложное правило оперирующее сразу нескольким сущностями, но мне пока что ничего даже близко подобного не встречалось, поэтому представляется более рациональным реализация по аналогии с экшенами в контроллере - по умолчанию правила все в одном классе, а если надо нечто этакое - возможность указать отдельный класс.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: rbac куда делся biz_rule ?

Сообщение lynicidn »

zelenin писал(а):но на самом деле можно наверное и анонимные функции туда запилить. Будет действительно удобно.
анонимки нельзя - бд стораж не поймет, собственно почему и были биз руле :roll:
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: rbac куда делся biz_rule ?

Сообщение zelenin »

lynicidn писал(а):
zelenin писал(а):но на самом деле можно наверное и анонимные функции туда запилить. Будет действительно удобно.
анонимки нельзя - бд стораж не поймет, собственно почему и были биз руле :roll:
точнее анонимки не сериализуются, но это решаемо.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: rbac куда делся biz_rule ?

Сообщение nepster »

подскажите пожалуйста решение проблемы с которой я столкнулся:

Есть таблица users, в ней есть поле role (значение может быть: user, administrator и тп.)

Я создал класс как в доках:

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

<?php
namespace common\rbac;

use yii;
use yii\rbac\Rule;

class UserGroupRule extends Rule
{
    public $name = 'userGroup';

    /**
     * @param string|integer $user the user ID.
     * @param Item $item the role or permission that this rule is associated with
     * @param array $params parameters passed to ManagerInterface::checkAccess().
     * @return boolean a value indicating whether the rule permits the role or permission it is associated with.
     */
    public function execute($user, $item, $params)
    {
        if (!Yii::$app->user->isGuest) {
                        
            $group = Yii::$app->user->identity->role;

            if ($item->name == $group) {
                return true;
            }
        }
        return false;
    }
} 

Ну и реализовал правила:

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

        
        
        // Создать пост
        $createPost = $auth->createPermission('createPost');
        $createPost->description = 'Создать пост';
        $auth->add($createPost);

        // Редактировать пост
        $updatePost = $auth->createPermission('updatePost');
        $updatePost->description = 'Обновить пост';
        $auth->add($updatePost);
        
                
             
        // Правило Группы пользователей
        $rule = new \common\rbac\UserGroupRule;
        $auth->add($rule);
        
        // Пользователь
        $user = $auth->createRole('user');
        $user->ruleName = $rule->name;
        $auth->add($user);
        
        // Администратор
        $admin = $auth->createRole('administrator');
        $admin->ruleName = $rule->name;
        $auth->add($admin);
        $auth->addChild($admin, $user);
                        
                        
                        
        $auth->addChild($user, $createPost);
        $auth->addChild($user, $updatePost); 


Теперь хочу проверить это дело:

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

       
        if (\Yii::$app->user->can('user')) {
            echo '<p>Есть права user</p>';
        }
  
       
        if (\Yii::$app->user->can('administrator')) {
            echo '<p>Есть права administrator</p>';
        }
  
       
        if (\Yii::$app->user->can('createPost')) {
            echo '<p>Есть права createPost</p>';
        }
  
       
        if (\Yii::$app->user->can('updatePost')) {
            echo '<p>Есть права updatePost</p>';
        }
 

Итак результат:
role = 'user' - пусто
role = 'administrator' - видим 1 запись Есть права administrator


Подскажите пожалуйста где я ошибся?
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: rbac куда делся biz_rule ?

Сообщение vova07 »

Я не совсем понял проблему, но если она зключается в том что для пользователя с ролью "administrator" не срабатывает проверка дочерних правил, то как описано в доках вы должны учести иерархию правил в своей "UserGroupRule". Рабочий пример.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: rbac куда делся biz_rule ?

Сообщение nepster »

там прикол даже в том, что для user вообще ничего не срабатывает.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: rbac куда делся biz_rule ?

Сообщение vova07 »

Не могу сказать точно относительно вашего кода что не так, но по логике RBAC Yii2 чтобы получить желаемый вами результат, вам нужно использовать "defaultRoles". В противном случае, вы должны привязать пользователей к определенной роли. Исходя из примера проблема у вас именно в этих моментах.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: rbac куда делся biz_rule ?

Сообщение nepster »

да действительно работает. Хотя мне непонятно пару вещей:

Подскажите пожалуйста в чем смысл перечислять иерархию ролей "return $role === $item->name || $role === 'administrator';" ?

И к примеру если делать возможность управлять группами пользователей и создавать новую группу, то нужно ее делать на основе user и давать больше прав ?
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: rbac куда делся biz_rule ?

Сообщение mihail_dev »

zelenin писал(а):но на самом деле можно наверное и анонимные функции туда запилить. Будет действительно удобно.
ток как их в бд допустим хранить?
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: rbac куда делся biz_rule ?

Сообщение zelenin »

mihail_dev писал(а):
zelenin писал(а):но на самом деле можно наверное и анонимные функции туда запилить. Будет действительно удобно.
ток как их в бд допустим хранить?
найти приемлимое решение. super closure например позволяет сериализовать, но это не приемлимо. Возможно статика? думаю не будет работать.
Ответить