【问题标题】:laravel constructor redirectlaravel 构造函数重定向
【发布时间】:2016-11-05 08:54:29
【问题描述】:

我有一种方法可以检查用户的角色是否是管理员,如果不是,则使用return redirect('/')->send(); 重定向它们。如何在不显示页面和等待重定向的情况下检查用户角色并重定向用户?

我的控制器:

class AdminController extends Controller
{
    public function __construct()
    {
        if (Auth::check())
        {
            $user = Auth::user();
            if ($user->role != 'admin')
            {
                return redirect('/')->send();
            }
        }
        else
        {
            return redirect('/')->send();
        }
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return View('admin/index');
    }
}

【问题讨论】:

    标签: php redirect laravel-5


    【解决方案1】:

    通过将其添加到上面的类来导入重定向 use Illuminate\Support\Facades\Redirect;

    然后使用 return Redirect::to('login');

    【讨论】:

      【解决方案2】:

      创建您自己的Middleware。这是一个例子。在我的示例中,我在一个单独的模型中有几个用户组。您必须根据需要更改代码。

      通过终端/控制台创建中间件:

      php artisan make:middleware UserGroupMiddleware
      

      创建的中间件类可以在app/Http/Middleware/UserGroupMiddleware.php中找到

      您的中间件中需要以下代码:

      namespace App\Http\Middleware;
      
      use Closure;
      use App\User;
      use App\Usergroup;
      
      class UserGroupMiddleware
      {
          /**
           * Handle an incoming request.
           *
           * @param  \Illuminate\Http\Request  $request
           * @param  \Closure  $next
           * @return mixed
           */
          public function handle($request, Closure $next, $group)
          {
              if($request->user() !== NULL){
                  $userGroupId = $request->user()->group;
                  $userGroup = Usergroup::find($userGroupId);
      
                  if($userGroup->slug === $group){
                      return $next($request);
                  }
              }
              // Redirect the user to the loginpage
              return redirect('/login');
          }
      }
      

      现在你必须在app/Http/Kernel.php注册这个中间件:

      protected $routeMiddleware = [
          // other middlewares
      
          // Custom Middleware
          'group' => \App\Http\Middleware\UserGroupMiddleware::class
      ];
      

      最后你需要将中间件附加到你的路由:

      Route::group(['middleware' => 'group:admin'], function(){
          // Routes for admins, e.g.
          Route::get('/dashboard', 'SomeController@dashboard');
      });
      
      // Or for a single route:
      Route::get('/dashboard', ['middleware' => 'group:admin'], function(){
          return view('adminbereich.dashboard');
      });
      

      请记住,您可以通过以下方式传入多个中间件:

      Route::get('/some/route', ['middleware' => ['group:admin', 'auth']], 'SomeController@methodXYZ');
      

      【讨论】:

        猜你喜欢
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        相关资源
        最近更新 更多