【发布时间】:2016-08-12 05:52:30
【问题描述】:
我正在做一个 laravel 项目,我需要限制对某些页面的访问,以便只有经过身份验证的用户才能查看该页面。
为此,创建了一个中间件:php artisan make:middleware OnlyRegisteredUser
并在 App\Http\kernel.php 内的 $routemiddleware 中注册为 '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();
// ...
});
}
现在为了限制对我的控制器方法的一些的访问,例如创建,我向我的PoemsController 添加了一个构造函数,如图所示:
public function __construct()
{
$this->middleware('onlyregistereduser');
}
我现在的问题是,这导致到PoemsController 的每条路由都将我重定向到登录页面。再次登录后,它并没有将我带到我打算访问的页面。它把我带到了主页。我想要的是限制对某些控制器方法的访问,而不是所有这些方法,并且能够在用户登录后重定向到预期的页面。
我希望你能理解我的问题。
任何帮助将不胜感激。
【问题讨论】:
标签: laravel-5 roles middleware