Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Следующая тонкость — в моем описании есть небольшая подмена понятий. Группа (которая отражает принадлежность к иерархической структуре в реальном мире) и группа (роль) в системе разделения прав не всегда одно и тоже. Специально оставил, так как сам наступал на эти грабли (думаю, не я один). Нужно разделить понятия группа и роль. Тогда можно будет сделать соотношение между ролями и пользователями многие ко многим.
Основным понятием в RBAC Yii является элемент авторизации. Элемент авторизации — это права на выполнение какого-либо действия (создать новую запись в блоге, управление пользователями). В зависимости от структуры и цели, элементы авторизации могут быть разделены на операции, задачи и роли. Роль состоит из задач. Задача состоит из операций. Операция — разрешение на какое-либо действие (дальше не делится). К примеру, в системе может быть роль администратор, состоящая из задач управление записями и управление пользователями. Задача управление пользователями может состоять из операций создать пользователя, редактировать пользователя и удалить пользователя. Для достижения большей гибкости, роль в Yii может состоять из других ролей и операций. Задача может состоять из других задач. Операция — из других операций.
can_edit_30(user, resource)
return user.id == resource.user_id && (resource.created_at - now()) < 30;
end
Гостям вообще разрешить только смотреть
allow('guest', 'read', 'posts[not_only_for_moderators]')allow('admin', 'all', 'all')Надо в некоторые разделы запретить постинг на первый месяц, некоторые сделать доступными только модераторам.
allow('members', 'read', 'posts[not_only_for_moderators,not_fitst_month]')
allow('members', [read, 'post'], 'posts[not_only_for_moderators,fitst_month]')Еще хочется на отдельные темы (!) назначать персональных модераторов.
allow('moderators', 'all', 'posts[where_moderator]')
allow('moderators', ['read', 'post'], 'posts[only_for_moderators]')Вот если модератор — надо в лог записать, что модератор совершил действие.
потому что универсальные, позволяют решить задачу в общем виде
IMHO велоустройство через чур complexed.
Btw, почему мы именуем DSL`ом то, что им не является? :)
ACL: в поисках идеального решения