Laravel 5 Laravel 5使用中间件限制对页面的访问

Laravel 5 Laravel 5使用中间件限制对页面的访问,laravel-5,roles,middleware,Laravel 5,Roles,Middleware,我正在从事一个laravel项目,我需要限制对某些页面的访问,以便只有经过身份验证的用户才能查看该页面 为此,创建了一个中间件:php artisan make:middleware OnlyRegisteredUser 并在App\Http\kernel.php内部的$routemddleware中将其注册为 'onlyregistereduser'=>\App\Http\Middleware\onlyregistereduser::class, 这就是课堂。如果未登录,它会将用户重定向到au

我正在从事一个laravel项目,我需要限制对某些页面的访问,以便只有经过身份验证的用户才能查看该页面

为此,创建了一个中间件:
php artisan make:middleware OnlyRegisteredUser

并在
App\Http\kernel.php
内部的
$routemddleware
中将其注册为

'onlyregistereduser'=>\App\Http\Middleware\onlyregistereduser::class,

这就是课堂。如果未登录,它会将用户重定向到
auth/login

    public function handle($request, Closure $next, $right=null)
{
    $user = $request->user();

    if ($user && $user->onlyregistereduser()) {
        return $next($request);
    }

    return redirect('auth/login');
}
这是我的路线:

Route::get('admin/poem', ['middleware' => 'onlyregistereduser:admin', 'uses'=>'PoemsController@poem']);
admin
是传递给我的中间件的参数。它取自我的用户模型,其中有一个“enum”列,如下所示:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
         //...
        $table->enum('rights', ['admin', 'guest'])->nullable();
         // ...
    });
}
现在,为了限制对我的一些控制器方法的访问,例如create,我在我的
poemcontroller
中添加了一个构造函数,如下所示:

public function __construct()
{
   $this->middleware('onlyregistereduser');
}
我现在的问题是,这导致到
PoemController
的每一条路由都将我重定向到登录页面。再次登录后,它不会把我带到我打算访问的页面。它把我带到了主页。我想要的是限制对控制器方法的访问,而不是全部,并且能够在用户登录后重定向到预期页面。 我希望你能理解我的问题。
任何帮助都将不胜感激

从构造函数中删除中间件,您不必同时向路由和构造函数添加中间件。这应该可以解决你的“.我想要的是只限制对一些控制器方法的访问,而不是所有的”问题

对于其他问题,请像这样修改中间件

public function handle($request, Closure $next, $right=null)
{
    $user = $request->user();

    if ($user && $user->onlyregistereduser()) {
        return $next($request);
    }
    $request_url = $request->path();
    session()->put('login_refferrer', $request_url);
    return redirect('auth/login');
}
在登录后重定向用户之前

 if(session()->has('login_refferrer')){
  $url = session()->pull('login_refferrer');
  return redirect($url);
}