В проекте предполагается несколько групп пользователей. Под группами подразумевается не Админ, Модер и т.д., а несколько пользователей, работающих над одной задачей. То есть во всем проекте есть одни и те же действия, которые пользователи могут производить только в отношении своей группы. Например, группа А может добавлять новости, которые будут видны только участникам этой группы, а группа Б может добавлять новости только для своей группы. Конечно все новости находятся в одной таблице в БД. В группах тоже есть уровни доступа, Админ, Модер и т.д.
Проблема в том, что я не до конца понимаю принцип работы AccessControl и поэтому не могу правильно прописать правила.
Насколько я понял, при createPermission('action') создается правило для доступа к определенному действию в выбранном контролере, а при создании правила через Rule() в каждом действии (кроме login, logout, profile, signUp) надо проверять через can(), отправляя в params['group_id']group_id текущего пользователя.
Есть ли какие-то другие способы попроще? Прописать group_id в behaviors или напрямую в CustomRule()?
Добрый день.
Во-первых, вот ссылка на официальную документацию.
Так же есть хороший блог, где автор блога всё подробно разжёвывает и кладёт в рот.
От себя могу добавить только одно.
Если у Вас есть id группы, так же есть новость, у которой есть id группы, к которой она принадлежит и есть пользователь у которого есть id той же группы, на которую он подписан, то в чём проблема? Разделяйте всё по id группы. Проверяйте, в какую группу входит пользователь и по id группы отдавайте новость. Если пользователь добавляет новость, то проверяйте в какую группу входит пользователь и значит id этой группы приписывайте к новости.
Я бы сделала так. В остальном - RBAC
Документацию я читал, но спасибо за русскоязычную версию, так намного понятнее. У новости нет ид группы, только ид пользователя. Про это я и спрашиваю, нельзя ли обойтись одной записью в контроллере, вместо того, чтобы в каждом действии прописывать проверочный код. Иначе я вообще не вижу преимущества рбак над простой проверкой вручную.
slo_nik, Новости это только пример. Проблема в группе. Нужно, чтобы у одной группы был как бы свой отдельный сайт с админом, модерацией и т.д. Но домен и БД одни на всех. Я могу для любой записи в БД определить группу, но смысл именно в том, чтобы это определялось автоматически, используя рбак, а не проверялось вручную при каждом вводе/выводе данных.