OctoberCMS Backend Users - Список и форма по правам доступа

В админке OctoberCMS по умолчанию выводятся все элементы таблицы. Научимся расширять запрос списка контроллера по правам доступа.

К примеру у нас есть две роли администраторов: Авторы и Модераторы. Авторам нужно дать возможность просматривать только свои материалы в админке OctoberCMS.

По умолчанию там выведутся все материалы, то есть то что нам нужно показать Модераторам.

Список по ролям доступа

В своем контроллере нам нужно добавить функцию listExtendQuery, которая будет расширять запрос при выводе списка элементов. К примеру:

public function listExtendQuery($query, $definition)
{
    // получаем группы пользователя
    $role_id = $this->user->role->id;
    // получаем id текущего пользователя
    $user_id = $this->user->id;
    // показываем материалы только этого автора, если его роль - Автор
    if($role_id == 2) {
        // Самое главное что тут нужно :)
        $query->whereIn('author_id', $user_id);
    }
}

Таким образом $query можем расширять как угодно.

Форма по ролям доступа

Если у пользователя есть право доступа просматривать список этого контроллера, то и форму добавления он также может видеть. Добавим проверку на id автора при редактировании. В своем контроллере пишете:

    use Site21\Posts\Model\Post;
    ==
    public function update($recordId, $context = null)
    {
        // проверка редактируемой записи: если запись от текущего автора, то редактировать он ее может
        $record = Post::find($recordId);
        if($record->author_id != $this->user->id) {
            // выводим ошибку
            return \Response::make(\View::make('backend::access_denied'), 403);
        }
        
        // Обычный вывод формы если все ОК
        return $this->asExtension('FormController')->update($recordId, $context);
    }

Таким образом если администратор не является автором материала, то при переходе на страницу ее редактирования, он получит ошику "Access Denied."

Это основные моменты которые могут понадобиться при настройке прав доступа в админке OctoberCMS.

Бонус :)

Вам может понадобиться просто проверка на права доступа. Для этого в своем плагине создаем эту настройку, далее импользуем проверку на роль у пользователя:

if($this->user->hasPermission(['site21.posts.manage_posts'])) {
    // если право доступа у пользователя имеется
}

Опубликовано 21 мая 2021 г. в категориях: October CMS Winter CMS

Если Вам необходимо внедрить данную разработку на свой проект, свяжитесь со мной, обсудим цену и срок.

Связаться со мной Fill 1