October CMS: Как настроить права и группы пользователей (менеджеров), для разрешения редактирования отдельных филиалов (отделений компании)?
Используется October CMS
Есть компания с множеством филиалов (Отделений) расположенных в разных городах (сеть).
Сотрудники филиала (отделения компании) должны иметь возможность править некоторые тексты на странице филиала и публиковать новые акции, но только в своём филиале, к которому они прикреплены. Редактирование других филиалов должно быть недоступно для них. И так с каждой группой сотруднков, привязанной к какому-то конкретному филиалу.
Как лучше всего организовать (на чем построить), и с какой стороны подойти к вопросу, что бы всё это осуществить?
Может всё же есть кто на Тостере, например эксперты по October CMS?
В итоге я начал создание собственного плагина OC Branch Management, который даст возможность организовать работу компании c множеством отделений (сеть), создавать города и филиалы в них, распределять менеджеров по группам и ограничить права, постить отдельные рекламные акции в филиалах и т.д.
По завершению работ над плагином скину ссылку на него сюда.
И может сможете помочь разобраться и доработать мой бесплатный плагин, который в будущем я с радостью выложу в свободный доступ для всех. Быть может на GitHub или в официальный магазин октября.
Документацию читал конечно, но не понятно что делать в моём случае...
Может попробовать расширить плагин Static Pages своим плагином, что бы каждая группа пользователей могла редактировать только определённую страницу или тоже самое проделать с категориями блога.
Но я пока не понимаю как это сделать.
Я реализовал с помощью записей в плагине, к которым с помощью поля Relations (отношения) присвоил группы пользователей.
т.е.
- есть табличка групп пользователей (стандартная октябрьская)
- есть моя табличка "Branches" (филиалы, отделения компании, как отдельные страницы).
- и есть ещё одна моя таблица которая связывает записи обоих таблиц по ID методом выбора чекбокса отношений (Relations), который находится в каждой записи модели Branches.
Это то, что я смог сделать в настоящее время.
Сейчас остался открытым вопрос, как можно отфильтровать запрос, опираясь на группы выбранные в записи (Branches) с помощью отношений и групп, в которых состоит текущий пользователь.
Так менеджеры компании, которые прикреплены например к группе Москва, не смогут редактировать другие отделения компании.
talas1234, да, всё верно.
В backend плагина есть страница модели Branches к примеру.
Где я вижу все записи в таблице, но мне нужно сделать следующее:
Получить группы в которых состоит текущий пользователь. (с которыми он связан грубо говоря).
Создать запрос, который выведет на экран только те записи, которые связаны именно с этими группами.
Сам в процессе изучения Октября, поэтому задача заинтересовала.
И второй момент, не претендую на идеальность решения.
Итак создаем в контролере экшен, которой будет доступен только менеджерам, через разрешения.
Например (в своем примере вместо филиалов использовал бренд, но суть от этого не меняется)
public function brands()
{
// получаем список всех групп в который состоит пользователь, вернее ИД этих групп
// это стандартные функции октября
$groups_id = array_pluck($this->user->groups->flatten(), 'id') ;
// здесь из промежуточной (важно именно промежуточной!!!) таблицы вытаскиваем все ИД брендов
// то есть надо создать файл модели этой таблицы, если файла нет, стандартный файл модели
$brands_id = PivotBrands::whereIn('user_group_id', $groups_id)->select('brands_id')->distinct()->get();
// и уже по этим ИД вытаскиваем все записи которые в итоге принадлежат только тем
// группам, в которых состоит пользователь.
$return = Brands::find($brands_id);
// ну и вывод результата на экран.
dd($return->toArray());
}