Laravel: Как лучше всего перенаправить пользователя по умолчанию laravel на страницу администратора, если пользователь является администратором, или на страницу пользователя, если пользователь не является администратором? - PullRequest
0 голосов
/ 31 марта 2020

Модель User имеет функцию isAdmin () для проверки, является ли пользователь администратором. Что делать дальше?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Лучшая практика - это роли, и вы добавляете роль в свой Routes :: middleware,

Route::group(['middleware' => ['auth', 'roles:admin']], function () {
//Your routes
});

Ядро. php

 'roles' => Middleware\CheckRole::class,

Создание промежуточного ПО

   namespace App\Http\Middleware;

  use Closure;

  class CheckRole
   {
     public function handle($request, Closure $next, ...$role)
     {
    if ($request->user()->hasAnyRole($role)) {
        return $next($request);
    }
    return redirect(route('hour'));
   }

    }

Создать функцию на пользовательской модели

public function authorizeRole($role)
{
    if ($this->hasAnyRole($role)) {
        return true;
    }
    return abort(401, 'Unauthorized.');
}
 public function hasAnyRole($roles)
{
    if (is_array($roles)) {
        foreach ($roles as $role) {
            if ($this->hasRole($role)) {
                return true;
            }
        }
    } else {
        if ($this->hasRole($roles)) {
            return true;
        }
    }
    return false;
}

public function hasRole($role)
{
    if ($this->role()->where('name', $role)->first()) {
        return true;
    }
    return false;
}


public function role()
{
    return $this->belongsTo('App\Role')->withDefault();
}

И ролевая модель

<?php

   namespace App;

   use Illuminate\Database\Eloquent\Model;

   class Role extends Model
    {
        public function user()
       {
    return $this->hasMany('App\User');
     }
    }

Больше кода, но лучший способ для этого действия

0 голосов
/ 31 марта 2020

Лучший способ - использовать значение по умолчанию laravel LoginController, расположенное в App\Http\Controllers\Auth\LoginController.

. В этом контроллере вы можете переопределить метод authenticated, который вводится из черты AuthenticatesUsers, просто добавив этот метод в LoginController:

 * @param Request $request
 * @param $user
 */
protected function authenticated(Request $request, $user)
{
    if ($user->isAdmin()) {
        return redirect(route('admin-dashboard')); 
       //redirect to desired place since user is admin.
    }
}
...