Skip to content

Проверка permission в процессорах #9

Closed

Description

@createit-ru

Во многих процессорах мы можем видеть проверку permission, например рассмотрим процессор MiniShop3\Processors\Settings\Link\Remove

в нем видим метод

public function initialize()
{
    if (!$this->modx->hasPermission($this->permission)) {
        return $this->modx->lexicon('access_denied');
    }

    return parent::initialize();
}

Однако, если мы посмотрим базовый процессор ModelProcessor мы видим наличие в нем функции checkPermissions с таким же содержанием. В свою очередь checkPermissions вызывается в функции run() базового Processor. Таким образом permission проверяются дважды: в методе checkPermissions() и в initialize().

Предлагаю

Проверить необходимость таких проверок в процессорах miniShop3, если они действительно не нужны - удалить их из процессоров.

Activity

  1. biz87 commented on Feb 15, 2026

    @biz87
    Member

    Анализ актуальности

    Проблема подтверждена и по-прежнему актуальна.

    Текущее состояние

    56 процессоров содержат дублирующую проверку прав — и в checkPermissions() (наследуется от ModelProcessor), и в initialize():

    public $permission = 'mssetting_save';
    
    public function initialize()
    {
        if (!$this->modx->hasPermission($this->permission)) {
            return $this->modx->lexicon('access_denied');
        }
        return parent::initialize();
    }

    Базовый ModelProcessor::checkPermissions() уже проверяет $this->permission автоматически и вызывается в Processor::run() до initialize().

    Нюанс: разные сообщения об ошибке

    • checkPermissions() возвращает permission_denied_processor
    • initialize() возвращает access_denied

    Нужно решить, какое сообщение оставить.

    Три паттерна в кодовой базе

    Паттерн Кол-во Описание
    Дублирующая проверка в initialize() 56 Избыточная, можно удалить
    Кастомный checkPermissions() 12 Легитимная кастомная логика (например, Product/Delete.php) — оставить
    Без переопределения (наследуется) ~95 Корректный подход, ничего не менять

    План работ

    1. Удалить метод initialize() с проверкой прав из 56 процессоров
    2. Убедиться, что свойство $permission задано корректно в каждом
    3. Оставить процессоры с кастомным checkPermissions() без изменений
    4. Проверить, что access_denied и permission_denied_processor не нуждаются в унификации

    Объём: ~56 файлов, механическая правка, низкий риск. Потребуется тестирование прав доступа после изменений.

  2. added
    priority: lowНизкий приоритет, когда будет время
    on Feb 15, 2026
  3. self-assigned this
    on Feb 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

priority: lowНизкий приоритет, когда будет время

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions