php - 自定义 Spatie Laravel-权限异常消息
问题描述
我在 Laravel 5.8 API 应用程序中添加了Saptie Laravel 权限包。一切正常,当非管理员用户尝试访问管理员特定路由时,我会遇到异常。
但是,默认异常呈现为 HTML 403 User does not have the right roles
。考虑到我在 API 应用程序中使用它,我想为此类异常返回我自己的自定义消息。
我尝试检查是否auth()->user()->hasRole('admin')
仍然有相同的默认异常页面。这是我的代码
路线
Route::post('products', 'ProductController@store')->middleware('role:super-admin|admin'); // create a new product
控制器方法
if (auth()->user()->hasRole('admin')) {
// create & store the product
$product = Product::create($request->all())
// return new product
$responseMessage = 'Successful operation';
$responseStatus = 200;
$productResource = new ProductResource($product);
return response()->json([
'responseMessage' => $responseMessage,
'responseStatus' => $responseStatus,
'product' => $productResource
]);
} else {
return response()->json([
'responseMessage' => 'You do not have required authorization.',
'responseStatus' => 403,
]);
}
为什么我的自定义消息没有显示?
解决方案
因为您正在通过role
中间件保护您的路由,所以UnauthorizedException
将在您的控制器代码到达之前抛出。
您可以做的是使用 laravel 异常处理程序render
方法并检查异常类型并返回您自己的响应:
来自文档:
render 方法负责将给定的异常转换为应发送回浏览器的 HTTP 响应。默认情况下,异常会传递给为您生成响应的基类。但是,您可以自由检查异常类型或返回您自己的自定义响应
应用程序/异常/Handler.php
use Spatie\Permission\Exceptions\UnauthorizedException;
public function render($request, Exception $exception)
{
if ($exception instanceof UnauthorizedException) {
return response()->json([
'responseMessage' => 'You do not have required authorization.',
'responseStatus' => 403,
]);
}
return parent::render($request, $exception);
}
推荐阅读
- python - pygame.error:视频系统未初始化python代码错误
- python - 熊猫,每行数据帧的多次计算
- vba - 使用 Outlook VBA 选择 Outlook 邮件文件夹
- css - visjs 时间线图表工具提示
- r - shiny: apply shinycustomerloader after pressing actionButton
- google-oauth - 谷歌使用电子表格 API 警告私人网站的“未经验证的开发者”
- unity3d - 如何改变偏航角/将全局 eulerAngles 放入本地空间
- python - 如何制作神经网络keras的复杂输出
- ember.js - 如何在 Ember 集成测试中设置 ember-intl 服务?
- content-management-system - Magnolia 自动发布