rbac куда делся biz_rule ?
- mihail_dev
- Сообщения: 243
- Зарегистрирован: 2013.07.17, 00:51
- Откуда: Молдова
- Контактная информация:
Re: rbac куда делся biz_rule ?
я размышлял о разделении прав доступ и ролей
допустим описать структуру прав доступа на основе классов а роли уже где то хранить
и проверка чтоб не была с верху вниз а снизу вверх по идее путь должен сократится и лишние запросу убраться
но есть много но!
структура будет жёсткой то есть пользователю нельзя будет добавить правило только роли
и как организовать проверку снизу вверх
и как сделать нормальную читабельность правил по идее названием правила будет название класса а при условие намеспэйсов это будет громоздко
допустим описать структуру прав доступа на основе классов а роли уже где то хранить
и проверка чтоб не была с верху вниз а снизу вверх по идее путь должен сократится и лишние запросу убраться
но есть много но!
структура будет жёсткой то есть пользователю нельзя будет добавить правило только роли
и как организовать проверку снизу вверх
и как сделать нормальную читабельность правил по идее названием правила будет название класса а при условие намеспэйсов это будет громоздко
- mihail_dev
- Сообщения: 243
- Зарегистрирован: 2013.07.17, 00:51
- Откуда: Молдова
- Контактная информация:
Re: rbac куда делся biz_rule ?
я не согласен с вашей темой старый вариант на мой взгляд ещё хуже!zelenin писал(а):в тему viewtopic.php?f=9&t=18309
надо додумывать что то новое!!!
Re: rbac куда делся biz_rule ?
а конкретнее?mihail_dev писал(а):я не согласен с вашей темой старый вариант на мой взгляд ещё хуже!zelenin писал(а):в тему viewtopic.php?f=9&t=18309
надо додумывать что то новое!!!
от старого вариант здесь только способ описания прав.
- mihail_dev
- Сообщения: 243
- Зарегистрирован: 2013.07.17, 00:51
- Откуда: Молдова
- Контактная информация:
Re: rbac куда делся biz_rule ?
я уже поглядел там небольшая наработка на существующий рбак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']],
];
Re: rbac куда делся biz_rule ?
не, ну это уже совсем другая тема)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 ?
а кто-то вообще реализовывал модуль похожий на управление группами в IPB ?
-
- Сообщения: 60
- Зарегистрирован: 2013.03.20, 14:02
Re: rbac куда делся biz_rule ?
т.е. на каждый biz_rule свой класс?
а как быть с этим
где $this->client возвращал модель, и так я проверял biz_rule
а во втором yii как?
так уже не прокатит, так как
у метода can, только один параметр передается
а как быть с этим
Код: Выделить всё
array('allow',
'actions' => array('UpdateStatus'),
'roles' => array('UpdateStatus' => array('client' => $this->client))),
а во втором 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;
}
Re: rbac куда делся biz_rule ?
так передавайте два параметра.
-
- Сообщения: 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;
}
}
Re: rbac куда делся biz_rule ?
я не знаю откуда у вас matchRole и зачем он нужен, но синтаксис can таков https://github.com/yiisoft/yii2/blob/ma ... r.php#L656 и это позволяет передавать параметры так же как и в yii1.АлексейАлексей писал(а):а куда их передавать?) вы имеете ввиду чтобы свой метод matchRole написать?
Re: rbac куда делся biz_rule ?
если вы про AccessFilter, то он сделан для более простой проверки. Но там есть matchCallback, куда вы можете передать анонимку со сколько угодно сложной проверкой.
-
- Сообщения: 60
- Зарегистрирован: 2013.03.20, 14:02
Re: rbac куда делся biz_rule ?
я про https://github.com/yiisoft/yii2/blob/ma ... e.php#L138zelenin писал(а):я не знаю откуда у вас matchRole и зачем он нужен, но синтаксис can таков https://github.com/yiisoft/yii2/blob/ma ... r.php#L656 и это позволяет передавать параметры так же как и в yii1.АлексейАлексей писал(а):а куда их передавать?) вы имеете ввиду чтобы свой метод matchRole написать?
я не хочу анонимку писать, так как это лишний геморрой))
мне проще AccessRule переопределить и его использовать, чем штатный)
просто я не понимаю зачем это было упразднено во второй версии, такая клевая штука была((
Re: rbac куда делся biz_rule ?
лишний геморой - это создавать непрактичный функционал, для которого уже есть удобные аналоги.АлексейАлексей писал(а):я про https://github.com/yiisoft/yii2/blob/ma ... e.php#L138zelenin писал(а):я не знаю откуда у вас matchRole и зачем он нужен, но синтаксис can таков https://github.com/yiisoft/yii2/blob/ma ... r.php#L656 и это позволяет передавать параметры так же как и в yii1.АлексейАлексей писал(а):а куда их передавать?) вы имеете ввиду чтобы свой метод matchRole написать?
я не хочу анонимку писать, так как это лишний геморрой))
мне проще AccessRule переопределить и его использовать, чем штатный)
просто я не понимаю зачем это было упразднено во второй версии, такая клевая штука была((
В вашем случае, для корректной работы уже нужен созданный $this->client для передачи в проверку прав. То есть вы его должны еще до запуска основной бизнес-логики определить, чтобы передать в can. Причем инициализироваться будет всегда в независимости от того, нужно ли оно для проверки в текщем экшне или нет. А если таких параметров будет 5, то придется 5 объектов инициализировать.
Анонимка же позволит инициализировать объект внутри конкретного вызываемого правила.
Поясню на примере: допустим есть два экшна posts/view и posts/update. update может сделать только автор новости. view - любой. В вашем случае мне нужно до вызова обоих экшнов инициализировать объект Post, хотя понадобиться он мне только в update.
Резюмирую: для программиста должно быть два варианта - правильный и неправильный. И слово "геморой" программист должен применять только при выборе из двух правильных вариантов.
-
- Сообщения: 60
- Зарегистрирован: 2013.03.20, 14:02
Re: rbac куда делся biz_rule ?
по поводу 5 объектовzelenin писал(а):
В вашем случае, для корректной работы уже нужен созданный $this->client для передачи в проверку прав. То есть вы его должны еще до запуска основной бизнес-логики определить, чтобы передать в can. Причем инициализироваться будет всегда в независимости от того, нужно ли оно для проверки в текщем экшне или нет. А если таких параметров будет 5, то придется 5 объектов инициализировать.
Анонимка же позволит инициализировать объект внутри конкретного вызываемого правила.
Поясню на примере: допустим есть два экшна posts/view и posts/update. update может сделать только автор новости. view - любой. В вашем случае мне нужно до вызова обоих экшнов инициализировать объект Post, хотя понадобиться он мне только в update.
Резюмирую: для программиста должно быть два варианта - правильный и неправильный. И слово "геморой" программист должен применять только при выборе из двух правильных вариантов.
Код: Выделить всё
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;
}
если я ошибаюсь, то поправьте меня.
давайте резюмируем, то что я хочу сделать т.е. проверка "biz_rule", это достигается либо анонимкой, либо допилом AccessRule
либо может есть еще более правильные варианты?
Re: rbac куда делся biz_rule ?
я написал: "если таких параметров будет 5, то придется 5 объектов инициализировать". у вас 1 параметр - 1 лишний объект, даже там, где не нужен.
вижу исключение из yii1.
ваш вариант неправильный. Анонимка - правильный.
вижу исключение из yii1.
ваш вариант неправильный. Анонимка - правильный.