У меня есть следующие роли пользователей в моем приложении.
Я хочу только лучшие 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;
}
Благодарю.
Задача ещё не решена.
Других решений пока нет …