首页 > 解决方案 > Laravel:如果用户是管理员,将默认 laravel 用户重定向到管理页面,或者如果用户不是管理员,如何将默认用户重定向到用户页面?

问题描述

User 模型有一个 isAdmin() 函数来检查用户是否是管理员。接下来做什么?

标签: laravelauthenticationredirectconditional-statementsadmin

解决方案


最佳实践是 whit 角色,您在 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');
     }
    }

是更多的代码,但是这个动作的最佳方式


推荐阅读