我正在 Laravel 中创建自定义管理面板,并尝试为未经授权的用户重定向到登录页面。网上有很多关于它的帖子,但它们都是针对旧版本的 Laravel,我找不到 10 的任何内容。这是 web.php:
Route::middleware(['role:admin'])->prefix('admin')->group(function()
{
Route::get('/', [App\Http\Controllers\Admin\HomeController::class, 'index'])->name('admin');
Route::resource('games', App\Http\Controllers\Admin\PostController::class);
});
我应该在此处添加什么来将用户重定向到登录页面?
我想你使用 Spatie\laravel-permissions 基于角色:管理中间件。
你必须制作自己的中间件,例如“IsAdmin”
php artisan make:middleware IsAdmin
然后在新中间件的handle()函数中编写授权逻辑。
hasRole() 方法来自 laravel-permissions 包,如果您有其他权限系统,请编辑此逻辑。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class IsAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if ( $request->user()->hasRole('admin']) ) {
return $next($request);
}
return redirect('/login');
}
}
将新的中间件添加到您的路线中。此外,您还应该添加 Laravel auth 中间件来检查用户是否已通过身份验证。
use \App\Http\Middleware\IsAdmin;
Route::middleware(['auth', IsAdmin::class])->prefix('admin')->group(function()