В настоящее время я создаю веб-приложение с использованием Laravel 4 PHP Framework, и часть моего приложения видна только подписчикам и администраторам; и, очевидно, я не хочу, чтобы гости видели эти разделы моего сайта.
У каждого пользователя есть role_id
который соответствует значению в абстрактном статическом классе в действует как перечисление:
abstract class UserRole {
const Unauthenticated = 1;
const Member = 2;
const Subscriber = 3;
const CharterSubscriber = 4;
const Moderator = 5;
const Administrator = 6;
}
Потому что большая часть моего контента динамична в зависимости от роли пользователя; Я обнаружил, что проверяю, имеет ли пользователь определенную роль или более высокий уровень, используя синтаксис Blade PHP в моих представлениях.
Чтобы сделать это, я должен использовать довольно многословный синтаксис:
@if (Auth::user() && Auth::user()->role_id == UserRole::Administrator)
…хороший пример Проблема здесь заключается в том, что сначала я должен проверить, существует ли Auth :: user (); если этого не произойдет, второе логическое сравнение не удастся, поэтому я даже не могу сделать это:
@if (Auth::user()->role_id == UserRole::Administrator)
…который чище, но все же довольно многословен. В идеале я хотел бы сделать что-то вроде:
@if (Auth::isAdmin())
…или же…
@if (Auth::isSubscriberOrGreater())
Как я могу сделать это? Я не так много знаю о контейнере LOCVEL, поэтому любые ответы должны быть достаточно хорошо объяснены.
Я могу предложить решение, хотя оно может быть немного уродливым:
Auth :: user () метод возвращает вам модель User или NULL, поэтому в модели пользователя вы можете проверить, является ли пользователь администратором с помощью метода isAdmin (или вы можете выполнить любую другую проверку) следующим образом:
public function isAdmin(){
if( $this->role_id == 6){
return True;
}
return False;
}
(на самом деле вы можете вызвать метод любым другим именем и выполнить любую другую проверку там).
и тогда в шаблоне лезвия у вас будет что-то вроде этого:
@if (@Auth::isAdmin())
Чтобы не бросать уведомление, вы просто ставите «@», который является Оператор контроля ошибок перед переменной.
Других решений пока нет …