protonemedia / laravel-tracer
Requires
- php: ^7.2 || ^8.0 || ^8.1
- illuminate/support: ^6.0 || ^7.0 || ^8.0 || ^9.0
Requires (Dev)
- orchestra/testbench: ^4.0 || ^5.0 || ^6.0 || ^7.0
- phpunit/phpunit: ^8.0 || ^9.0
This package is auto-updated.
Last update: 2024-01-09 10:50:11 UTC
README
不要在生产环境中使用!
一个通过捆绑和验证路由来记录已认证用户请求的包。
安装
您可以通过composer安装此包
composer require protonemedia/laravel-tracer
发布迁移和配置文件,然后运行迁移。
php artisan vendor:publish php artisan migrate
使用方法
将QualifyRoute
中间件添加到您的路由中间件栈中
class Kernel extends \Illuminate\Foundation\Http\Kernel { protected $routeMiddleware = [ // ... 'qualify' => \ProtoneMedia\LaravelTracer\Middleware\QualifyRoute::class, // ... ]; }
将TraceUser
中间件添加到您想要跟踪的路由或分组,例如在web.php
路由文件中
use ProtoneMedia\LaravelTracer\Middleware\TraceUser; Route::group(['middleware' => [TraceUser::class]], function () { Route::get('home', 'HomeController'); Route::get('settings', 'SettingsController')->name('settings.show'); Route::get('privacy-policy', 'PrivacyPolicyController')->name('privacyPolicy.show')->middleware('qualify:terms'); Route::get('profile/notifications', 'NotificationsController')->name('notifications.index')->middleware('qualify:notifications,60'); Route::group(['middleware' => ['qualify:finance']], function () { Route::get('invoices', 'InvoicesController@index')->name('invoices.index'); Route::get('invoices/{id}', 'InvoicesController@show')->name('invoices.show'); }); Route::get('machine/{id}', 'MachineController'); Route::get('rack/{id}', 'RackController')->middleware('qualify:rack'); Route::get('server/{id}', 'ServerController')->middleware('qualify:server.{id}'); });
现在,这个例子中的每个请求都将记录到user_requests
表中。您可以使用ProtoneMedia\LaravelTracer\UserRequest
模型检索日志条目。
验证路由
如您所见,我们已将一些示例路由添加到我们想要跟踪的路由组中。让我们解释每个路由是如何被验证的。
- 对
/home
的GET请求将简单地被验证为home
,因为它没有名称也没有验证器。 - 对
/settings
的GET请求将被验证为settings.show
,因为它有一个名称但没有验证器。 - 对
/privacy-policy
的GET请求将被验证为terms
,这是通过qualify
中间件实现的。
速率限制
- 对
/profile/notifications
的GET请求将被验证为notifications
,如您所见,qualify
中间件被提供了一个第二个参数。这是此验证器日志之间的秒数。当用户在60秒内访问此路由多次时,它将被存储为1个请求。
分组验证器
- 对
/invoices
和/invoices/1
的GET请求将被验证为finance
。
参数
- 对
/machine/1
的GET请求将被验证为machine/1
,它没有名称和验证器,因此将使用路径作为验证器。 - 对
/rack/1
和/rack/2
的GET请求将被验证为rack
。尽管该路由有一个参数,但将使用验证器。 - 对
/server/1
的GET请求将被验证为server.1
。验证器中的参数将被替换为实际在路径中使用的值。
从控制器中进行验证
此包向 Illuminate\Http\Request
添加了两个宏。第一个是 qualifyAs
。与 QualifyRoute
中间件类似,此方法接受两个参数。第一个参数是名称,第二个参数(可选)是速率限制器使用的秒数。您可以从控制器使用 Request
对象或使用 request()
辅助方法来限定路由。另一个宏是 qualifiedRoute
,它是 QualifiedRoute
实例的获取器。
use Illuminate\Http\Request; class TicketsController extends Controller { public function index() { request()->qualifyAs('tickets', 60); } public function show(Request $request, $id) { $request->qualifyAs('tickets'); } public function delete(Request $request, $id) { $qualifiedRoute = $request->qualifiedRoute(); $qualifiedRoute->name(); $qualifiedRoute->secondsBetweenLogs(); } }
配置
配置文件只包含两个选项。第一个选项是 seconds_between_logs
,可以用来设置速率限制器的默认值。第二个选项是 should_trace_user
,在此您可以指定一个类@方法,该方法返回一个布尔值,指定是否应该跟踪。它接受两个参数:$request 和 $response
// config/laravel-tracer.php return [ 'seconds_between_logs' => 120, 'should_trace_user' => 'MyClass@shouldTrace', ];
// MyClass.php use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class MyClass { public function shouldTrace(Request $request, Response $response): bool { return !$request->user()->isAdmin(); } }
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近的变化。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 pascal@protone.media 而不是使用问题跟踪器。
鸣谢
许可
MIT 许可证(MIT)。请参阅 许可文件 了解更多信息。
Laravel 包模板
此包是用 Laravel 包模板 生成的。