2014-11-05 2 views
1

Это мой первый раз, когда я работаю с системой RBAC Yii2. Я использовал http://www.yiiframework.com/doc-2.0/guide-security-authorization.html, чтобы познакомиться с темой. Поскольку мне нужно какое-то администрирование для ролей/разрешений, я установил это расширение: https://github.com/mdmsoft/yii2-adminМогут ли разрешения Yii2 RBAC иметь несколько правил?

Я работаю над приложением, которое позволяет пользователям отправлять статьи. Есть два типа пользователей, администраторы и обычные пользователи.

Я создал 2 роли для этой цели. Роль администратора и роль пользователя.

Пользователи (как администраторы, так и пользователи) должны иметь возможность редактировать статьи. Администраторы должны иметь возможность редактировать любую статью, в то время как пользователи могут редактировать только свои статьи.

Для этого я создал 2 разрешения. Разрешение «Изменить» и разрешение «Редактировать». Затем я создал правило «IsOwner» и привязал его к разрешению «EditOwn».

Я назначил права на редактирование роли администратора, а «EditOwn» - роли пользователя, и все работает отлично.

Теперь я хотел бы создать статус «блокировки» для каждой статьи. Если статья заблокирована, пользователь не может ее редактировать, даже если это его собственная статья. Админы должны иметь возможность редактировать его, даже если он заблокирован.

Для этого я создал новое правило «IsLocked», но я не знаю, как добавить его в разрешение «EditOwn». Я не знаю, возможно ли иметь 2 правила для одного разрешения?

EDIT: Прямо сейчас у меня есть это «дело» с тем, что у меня есть дополнительное разрешение «EditOwnIsLocked», к которому я прикреплял правило «IsLocked», которое является дочерним по отношению к «EditOwn», которое является дочерним положением «Редактировать» ». Это работает, но он чувствует себя грязным, простым и простым.

+1

Не лучше ли обрабатывать 'lock' в базе данных? Я имею в виду булевский столбец, который указывает, заблокирована ли статья или нет? –

+0

У меня есть это. И я хочу, чтобы «роль» проверяла, заблокирована ли статья или нет, проверив БД и запретив пользователю и разрешив администратору. – Ljudotina

+0

Что вы имеете в виду, не связано с определением роли. Вы можете проверить доступ, но не можете проверить, заблокирована ли статья или нет. Как вы хотите знать это с какой-то ролью? –

ответ

1

Как оказалось, на данный момент нет возможности прикреплять несколько правил к разрешению.

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

Эти решения не идеальны, но это то, на что оно сейчас. Первое решение порождает ненужные разрешения и загромождает список разрешений (в случае, если вы используете yii2-admin или аналогичные расширения), но сохраняет ваши правила в чистоте, а второе решение сохраняет ваш список разрешений в чистоте, но делает ваш повторный код одинаковым в нескольких правилах, которые что может означать ООП.

Смежные вопросы