Какой быстрый способ проверить, играет ли пользователь определенную роль в моем приложении Laravel?

В настоящее время я создаю веб-приложение с использованием 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, поэтому любые ответы должны быть достаточно хорошо объяснены.

0

Решение

Я могу предложить решение, хотя оно может быть немного уродливым:

Auth :: user () метод возвращает вам модель User или NULL, поэтому в модели пользователя вы можете проверить, является ли пользователь администратором с помощью метода isAdmin (или вы можете выполнить любую другую проверку) следующим образом:

public function isAdmin(){
if( $this->role_id == 6){
return True;
}
return False;
}

(на самом деле вы можете вызвать метод любым другим именем и выполнить любую другую проверку там).
и тогда в шаблоне лезвия у вас будет что-то вроде этого:

@if (@Auth::isAdmin())

Чтобы не бросать уведомление, вы просто ставите «@», который является Оператор контроля ошибок перед переменной.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]