Laravel 5使用中间件

时间:2016-08-12 05:52:30

标签: laravel-5 roles middleware

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

为此,创建了一个中间件:php artisan make:middleware OnlyRegisteredUser
并在$routemiddleware里面App\Http\kernel.php注册了它作为

'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是传递给我的中间件的参数。它取自我的用户模型,它具有“枚举”功能。专栏如下:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
         //...
        $table->enum('rights', ['admin', 'guest'])->nullable();
         // ...
    });
}

现在要限制对我的控制器方法的某些的访问,例如create,我向我的PoemsController添加了一个构造函数,如下所示:

public function __construct()
{
   $this->middleware('onlyregistereduser');
}

我现在的问题是,这导致PoemsController的每条路由都将我重定向到登录页面。登录后再次,它不会带我到我打算访问的页面。它需要我转到主页。我想要的是限制只访问一些控制器方法而不是所有控制器方法,并且能够在用户登录后重定向到目标页面。 我希望你理解我的问题。 任何帮助将不胜感激。

0 个答案:

没有答案