protonemedia/laravel-tracer

此包已被弃用,不再维护。未建议替代包。

v0.3.3 2022-08-01 07:48 UTC

This package is auto-updated.

Last update: 2024-01-09 10:50:11 UTC


README

不要在生产环境中使用!

Latest Version on Packagist Build Status Quality Score Total Downloads

一个通过捆绑和验证路由来记录已认证用户请求的包。

安装

您可以通过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 包模板 生成的。