Auth :: try () должен входить только тогда, когда у пользователя есть роль администратора

У меня есть следующие роли пользователей в моем приложении.

  • суперпользователя
  • админ
  • Модератор
  • пользователь

Я хочу только лучшие 3 роли('superuser', 'admin', 'moderator') войти в веб-приложение. И 'user' можете войти только через мобильное приложение. Сводная таблица используется для связывания ролей и пользователей.

Я использовал метод ниже, чтобы справиться с ситуацией. Я не уверен, насколько эффективно мое решение! Пожалуйста, помогите мне найти лучший способ или улучшить это решение.

UsersController

public function loginAction()
{

if (User::where('username', Input::get('username'))->firstOrFail()->isPrivileged()) {

if (Auth::attempt([
'username' => Input::get('username'),
'password' => Input::get('password')
],
true)
) {
return Redirect::intended('/');
}
}
return Redirect::to('/')->with('loginerror', 'Invalid Username or password');
}

Модель пользователя

protected $table = 'users';

/**
* @var array
*/
protected $privilege = ['superuser', 'admin', 'moderator'];

/**
* @return mixed
*/
public function roles()
{
return $this->belongsToMany('Role');
}

/**
* @param $name
* @return bool
*/
public function hasRole($name)
{
if (!$this->has('roles')) {
return false;
}
foreach ($this->roles as $role) {
if ($role->name == $name) return true;
}
return false;
}

/**
* @return string
*/
public function getRolesCSV()
{
$rolesCSV = '';
$roles = $this->roles->toArray();
$last = array_pop($roles);

foreach ($roles as $role) {
$rolesCSV = $rolesCSV . $role['name'] . ', ';
}

return ucwords($rolesCSV . $last['name']);
}

/**
* @return bool
*/
public function isPrivileged()
{
foreach ($this->privilege as $role) {
if ($this->hasRole($role)) {
return true;
}
}
return false;
}

Благодарю.

0

Решение

Задача ещё не решена.

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

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