首页 > 解决方案 > Laravel 权限:auth 提供者的超级管理员绕过不起作用

问题描述

我正在使用 spatie 的 laravel-permission 包,并在我的应用程序上创建了角色和权限,并在 AuthServiceProvider 中为超级管理员角色编写了旁路,如他们的文档中指定的那样。它就像一个魅力,突然停止工作,没有明显的原因,返回一个 403 错误。我已经重新启动了服务器并清除了路由缓存。我找不到它停止工作的原因......

这是我的 AuthServiceProvider 和路线

身份验证服务提供者:

public function boot()
{
    $this->registerPolicies();

    // allows super-admin everywhere in the app
    Gate::before(function (User $user) {
        return $user->hasRole('super-admin') ? true : null;
    });
}

路线:

// admin only management
Route::group(['prefix' => 'admin', 'middleware' => ['role:writer']], function () {

    //admin dashboard
    Route::get('/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');

    // blog management
    Route::get('articles', [AdminArticles::class, 'index'])->name('admin.articles.index');
    Route::get('articles/create', [AdminArticles::class, 'create'])->name('admin.articles.create');
    Route::get('articles/my-articles', [AdminArticles::class, 'myArticles'])->name('admin.articles.myArticles');
    Route::get('articles/{article}/edit', [AdminArticles::class, 'edit'])->name('admin.articles.edit');
    Route::get('articles/{article}/delete', [AdminArticles::class, 'destroy'])->name('admin.articles.destroy');
    Route::put('articles/{article}', [AdminArticles::class, 'update'])->name('admin.articles.update');
    Route::post('articles', [AdminArticles::class, 'store'])->name('admin.articles.store');
});

Route::group(['prefix' => 'admin', 'middleware' => ['role:super-admin']], function() {
    //pages
    Route::get('/homepage', [HomepageController::class, 'create'])->name('admin.home.create');
    Route::get('/homepage/{homepage}/edit', [HomepageController::class, 'edit'])->name('admin.home.edit');
    Route::put('/homepage/{homepage}', [HomepageController::class, 'update'])->name('admin.home.update');
    Route::post('/homepage', [HomepageController::class, 'store'])->name('admin.home.store');

    //users
    Route::get('users', [UsersController::class, 'index'])->name('users.index');
    Route::get('users/json', [UsersController::class, 'usersJson'])->name('users.json');
    Route::get('users/create', [UsersController::class, 'create'])->name('users.create');
    Route::get('users/{user}/delete', [UsersController::class, 'destroy'])->name('users.destroy');
    Route::get('users/{user}/edit', [UsersController::class, 'edit'])->name('users.edit');
    Route::put('users/{user}', [UsersController::class, 'update'])->name('users.update');
    Route::post('users', [UsersController::class, 'store'])->name('users.store');
});

标签: laravelrouteslaravel-permission

解决方案


推荐阅读