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