Изменение сообщения "permission_denied" в процессорах

Добрый день!

Есть сниппет, который вызывает процессор. Чтобы отработал процессор — настроены права доступа и если пользователь авторизован, то все отрабатывает нормально. Но если пользователь не авторизован (или права доступа не подходят), то возвращает ошибку, а точнее сообщение «permission_denied».

Подскажите пожалуйста, как будет правильно возвратить вместо сообщения «permission_denied» свое сообщение, к примеру «my_permission_denied».

Для примера взять стандартный процессор:
<?php
class TestItemCreateProcessor extends modObjectCreateProcessor {
    public $permission = 'item_create';

    /**
     * @return bool
     */
    public function beforeSet() {
        
        ...

        return parent::beforeSet();
    }
}

return 'TestItemCreateProcessor';
Sphinx
13 декабря 2019, 14:49
modx.pro
862
0

Комментарии: 4

Наумов Алексей
13 декабря 2019, 15:06
+1
Судя по всему или полностью переопределить метод run() или сделать свой run, где сначала сделать checkPermissions, если что вернуть свое сообщение, а затем вызвать base::run.
    Sphinx
    13 декабря 2019, 15:19
    0
    Точно, вы абсолютно правы, спасибо. Не заметил, что жестко вшито сообщение.
    А на сколько корректно переопределять этот метод? В «Классные процессоры в MODX 2.2» сказано… цитирую «Обратите внимание, как много в списке жирного текста. Это функции, или переменные, которые доступны вам для переназначения и расширения, чтобы вы могли сделать, что вам нужно.» и метод run() не входит в этот список.
      Наумов Алексей
      13 декабря 2019, 15:25
      +1
      Ну целиком я бы переопределять не стал…
      Вдруг кто-то еще переопределяет метод? Хотя по идее это довольно базовый метод, менять в нем нечего процессорам.

      В том, чтобы сделать так:
      public function run() {
          if (!$this->checkPermissions()) {
              $o = $this->failure($this->modx->lexicon('permission_denied'));
              return new modProcessorResponse($this->modx,$o);
           }
          return base::run():
      }
      я вижу один минус… это двойной вызов checkPermissions().
      Но, честно говоря, идей лучше у меня нет.
        Sphinx
        13 декабря 2019, 15:43
        0
        Все понятно. Спасибо большое.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4