CakePHP: мне всегда нужно использовать isAuthorized ()? - PullRequest
2 голосов
/ 14 ноября 2011

Насколько я понимаю, функция isAuthorized() в CakePHP используется для проверки того, есть ли у вошедшего в систему пользователя набор разрешений для выполнения данного действия;другими словами, это не для проверки, имеет ли пользователь правильный логин / пароль (для этого и нужен login()).Поскольку приложение, которое я пишу, на самом деле не имеет каких-либо разрешений, а просто должно проверить, вошел ли пользователь в систему, я написал следующую функцию isAuthorized ():

public function isAuthorized() {
    return true;
    }

Но ..он просто чувствует неправильно .Я смотрю на вышеупомянутую функцию и, честно говоря, она выглядит как-то из TheDailyWTF.(И CakePHP жалуется, если у меня нет функции isAuthorized(), поэтому я не могу ее удалить).

Поэтому я просто хотел бы попросить убедиться, что я не ошибаюсь:если моему приложению нужно только проверить, вошел ли пользователь в систему или нет, без каких-либо дополнительных разрешений, будет ли достаточно этой функции?

1 Ответ

5 голосов
/ 14 ноября 2011

Я так понимаю, вы используете компонент Cake Auth, поскольку именно здесь находится функция isAuthorized ().

Самый быстрый способ обойти это - определить ваши "разрешенные действия" в beforeFilter ()вашего контроллера.

Например, чтобы разрешить всем доступ ко всем действиям:

/**
 * Sets all actions to be allowed
 */
public function beforeFilter() {
  parent::beforeFilter();
  if (isset($this->Auth)) {
    $this->Auth->allow('*');
  }
}

Чтобы разрешить доступ к ' index ' & ' view 'действия:

/**
 * Allow access to index & view actions
 */
public function beforeFilter() {
  parent::beforeFilter();
  if (isset($this->Auth)) {
    $this->Auth->allowedActions = array('index', 'view');
  }
}

РЕДАКТИРОВАТЬ

Следующие комментарии ниже:

Вы можете установить authorize свойствокомпонент Auth для «контроллера», а затем определить обратный вызов.Таким образом, ваш контроллер будет содержать что-то похожее на:

public function beforeFilter() {
  parent::beforeFilter();
  $this->Auth->authorize = 'controller';
}

public function isAuthorized() {
  return true; 
}

Таким образом, вам не придется менять ядро, и он будет делать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...