【问题标题】:Laravel: How the best way for redirect a default laravel user to admin page if user is admin or to user page if user is not admin?Laravel:如果用户是管理员,将默认 laravel 用户重定向到管理页面,或者如果用户不是管理员,如何将默认用户重定向到用户页面?
【发布时间】:2023-04-01 07:52:01
【问题描述】:

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

【问题讨论】:

  • 表单登录是一样的。

标签: laravel authentication redirect conditional-statements admin


【解决方案1】:

最好的方法是使用位于App\Http\Controllers\Auth\LoginController 下的默认laravel LoginController

在该控制器中,您可以覆盖从AuthenticatesUsers trait 注入的authenticated 方法,只需在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.
    }
}

【讨论】:

    【解决方案2】:

    最佳实践是 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');
         }
        }
    

    更多的代码,但是最好的方式

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2017-03-19
      • 2017-04-06
      • 2014-05-01
      相关资源
      最近更新 更多