laravel - 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');
});
解决方案
推荐阅读
- spring - Spring Boot 2 执行器千分尺设置
- numpy - 如何从 IPython 打开在线参考?
- c++ - 如何使用 cout 在类中显示类中的值?
- javascript - 比较对象数组并分配相似度分数
- reactjs - 无法让 Material UI 单选按钮与 Formik 第二部分一起使用
- reactjs - 用 let 声明 Hook
- python - 为什么在通信()完成后子进程继续运行?
- php - Laravel如何将数据插入到彼此具有外键的2个表中
- single-page-application - 尝试获取子模块文件时,Oracle Jet 路由在路径中添加了额外的文件夹
- android - Android Studio - Gradle 项目同步失败,出现 ASCII 错误