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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

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

Сообщение mihail_dev »

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

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

Сообщение zelenin »

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

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

Сообщение mihail_dev »

zelenin писал(а):в тему viewtopic.php?f=9&t=18309
я не согласен с вашей темой старый вариант на мой взгляд ещё хуже!
надо додумывать что то новое!!!
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

mihail_dev писал(а):
zelenin писал(а):в тему viewtopic.php?f=9&t=18309
я не согласен с вашей темой старый вариант на мой взгляд ещё хуже!
надо додумывать что то новое!!!
а конкретнее?
от старого вариант здесь только способ описания прав.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

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

Сообщение mihail_dev »

zelenin писал(а):
mihail_dev писал(а):
zelenin писал(а):в тему viewtopic.php?f=9&t=18309
я не согласен с вашей темой старый вариант на мой взгляд ещё хуже!
надо додумывать что то новое!!!
а конкретнее?
от старого вариант здесь только способ описания прав.
я уже поглядел там небольшая наработка на существующий рбак
хотелось бы допустим описать все необходимые права в классах типа

blod/permission/CreatePost

при этом у него прописываются родители
допустим

blod/permission/Moderator

далее в файлике или в бд делаем роли

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

return [
    'admin' => ['assignments' => ['blod/permission/Moderator']],
    'someSuperRole' => ['class' => 'app/super/Role', 'assignments' => ['blod/permission/CreatePost']],
];
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

mihail_dev писал(а):
я уже поглядел там небольшая наработка на существующий рбак
хотелось бы допустим описать все необходимые права в классах типа

blod/permission/CreatePost

при этом у него прописываются родители
допустим

blod/permission/Moderator

далее в файлике или в бд делаем роли

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

return [
    'admin' => ['assignments' => ['blod/permission/Moderator']],
    'someSuperRole' => ['class' => 'app/super/Role', 'assignments' => ['blod/permission/CreatePost']],
];
не, ну это уже совсем другая тема)
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

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

Сообщение mihail_dev »

))
Изображение
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

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

Сообщение nepster »

а кто-то вообще реализовывал модуль похожий на управление группами в IPB ?
АлексейАлексей
Сообщения: 60
Зарегистрирован: 2013.03.20, 14:02

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

Сообщение АлексейАлексей »

т.е. на каждый biz_rule свой класс?

а как быть с этим

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

    array('allow',
                 'actions' => array('UpdateStatus'),
                  'roles'   => array('UpdateStatus' => array('client' => $this->client))),
 
где $this->client возвращал модель, и так я проверял biz_rule

а во втором yii как?
так уже не прокатит, так как

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

protected function matchRole($user)
    {
        if (empty($this->roles)) {
            return true;
        }
        foreach ($this->roles as $role) {
            if ($role === '?') {
                if ($user->getIsGuest()) {
                    return true;
                }
            } elseif ($role === '@') {
                if (!$user->getIsGuest()) {
                    return true;
                }
            } elseif ($user->can($role)) {
                return true;
            }
        }

        return false;
    } 
у метода can, только один параметр передается
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

так передавайте два параметра.
АлексейАлексей
Сообщения: 60
Зарегистрирован: 2013.03.20, 14:02

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

Сообщение АлексейАлексей »

а куда их передавать?) вы имеете ввиду чтобы свой метод matchRole написать?
АлексейАлексей
Сообщения: 60
Зарегистрирован: 2013.03.20, 14:02

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

Сообщение АлексейАлексей »

в первом yii это уже было

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

foreach($this->roles as $key=>$role)
        {
            if(is_numeric($key))
            {
                if($user->checkAccess($role))
                    return true;
            }
            else
            {
                if($user->checkAccess($key,$role))
                    return true;
            }
        } 
дык почему это выпилили из второго не понятно
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

АлексейАлексей писал(а):а куда их передавать?) вы имеете ввиду чтобы свой метод matchRole написать?
я не знаю откуда у вас matchRole и зачем он нужен, но синтаксис can таков https://github.com/yiisoft/yii2/blob/ma ... r.php#L656 и это позволяет передавать параметры так же как и в yii1.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

если вы про AccessFilter, то он сделан для более простой проверки. Но там есть matchCallback, куда вы можете передать анонимку со сколько угодно сложной проверкой.
АлексейАлексей
Сообщения: 60
Зарегистрирован: 2013.03.20, 14:02

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

Сообщение АлексейАлексей »

zelenin писал(а):
АлексейАлексей писал(а):а куда их передавать?) вы имеете ввиду чтобы свой метод matchRole написать?
я не знаю откуда у вас matchRole и зачем он нужен, но синтаксис can таков https://github.com/yiisoft/yii2/blob/ma ... r.php#L656 и это позволяет передавать параметры так же как и в yii1.
я про https://github.com/yiisoft/yii2/blob/ma ... e.php#L138

я не хочу анонимку писать, так как это лишний геморрой))
мне проще AccessRule переопределить и его использовать, чем штатный)

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

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

Сообщение zelenin »

АлексейАлексей писал(а):
zelenin писал(а):
АлексейАлексей писал(а):а куда их передавать?) вы имеете ввиду чтобы свой метод matchRole написать?
я не знаю откуда у вас matchRole и зачем он нужен, но синтаксис can таков https://github.com/yiisoft/yii2/blob/ma ... r.php#L656 и это позволяет передавать параметры так же как и в yii1.
я про https://github.com/yiisoft/yii2/blob/ma ... e.php#L138

я не хочу анонимку писать, так как это лишний геморрой))
мне проще AccessRule переопределить и его использовать, чем штатный)

просто я не понимаю зачем это было упразднено во второй версии, такая клевая штука была((
лишний геморой - это создавать непрактичный функционал, для которого уже есть удобные аналоги.

В вашем случае, для корректной работы уже нужен созданный $this->client для передачи в проверку прав. То есть вы его должны еще до запуска основной бизнес-логики определить, чтобы передать в can. Причем инициализироваться будет всегда в независимости от того, нужно ли оно для проверки в текщем экшне или нет. А если таких параметров будет 5, то придется 5 объектов инициализировать.
Анонимка же позволит инициализировать объект внутри конкретного вызываемого правила.

Поясню на примере: допустим есть два экшна posts/view и posts/update. update может сделать только автор новости. view - любой. В вашем случае мне нужно до вызова обоих экшнов инициализировать объект Post, хотя понадобиться он мне только в update.

Резюмирую: для программиста должно быть два варианта - правильный и неправильный. И слово "геморой" программист должен применять только при выборе из двух правильных вариантов.
АлексейАлексей
Сообщения: 60
Зарегистрирован: 2013.03.20, 14:02

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

Сообщение АлексейАлексей »

zelenin писал(а):
В вашем случае, для корректной работы уже нужен созданный $this->client для передачи в проверку прав. То есть вы его должны еще до запуска основной бизнес-логики определить, чтобы передать в can. Причем инициализироваться будет всегда в независимости от того, нужно ли оно для проверки в текщем экшне или нет. А если таких параметров будет 5, то придется 5 объектов инициализировать.
Анонимка же позволит инициализировать объект внутри конкретного вызываемого правила.

Поясню на примере: допустим есть два экшна posts/view и posts/update. update может сделать только автор новости. view - любой. В вашем случае мне нужно до вызова обоих экшнов инициализировать объект Post, хотя понадобиться он мне только в update.

Резюмирую: для программиста должно быть два варианта - правильный и неправильный. И слово "геморой" программист должен применять только при выборе из двух правильных вариантов.
по поводу 5 объектов

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

    public function getClient()
    {
        if (isset($this->actionParams['clientId']))
        {
            return $this->loadModel($this->actionParams['clientId']);
        }
    }

    public function loadModel($clientId)
    {
        if ($this->client=== null)
        {
            $this->client= Client::findOne($clientId);
        }

        if ($this->client=== null)
        {
            throw new CHttpException(404, 'The requested page does not exist.');
        }

        return $this->client;
    }
я тут не вижу 5 одинаковых объектов при вызове $this->client.
если я ошибаюсь, то поправьте меня.

давайте резюмируем, то что я хочу сделать т.е. проверка "biz_rule", это достигается либо анонимкой, либо допилом AccessRule
либо может есть еще более правильные варианты?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

я написал: "если таких параметров будет 5, то придется 5 объектов инициализировать". у вас 1 параметр - 1 лишний объект, даже там, где не нужен.
вижу исключение из yii1.
ваш вариант неправильный. Анонимка - правильный.
Ответить