backpack/activity-log

Backpack 活动日志

2.0.5 2024-08-16 09:18 UTC

This package is auto-updated.

Last update: 2024-09-16 09:34:54 UTC


README

Latest Version on Packagist Total Downloads The Whole Fruit Manifesto

是否曾想查看谁何时更改了您的应用程序中的哪些内容?想记住用户所做的所有数据库更改?嗯...这个包做不到这一点。 spatie/laravel-activitylog 可以,而且做得很好。这个包为使用 Backpack for Laravel 的项目添加了网页界面。它使您的管理员/超级管理员能够看到

  • 特定模型执行的各项活动;
  • 在特定模型上执行的各项活动;
  • 等等;

这一切是如何工作的?嗯

  • 当一个 Eloquent 模型发生变化时,Spatie 包会在数据库中记录它;
  • 此包添加了一个网页界面,因此管理员可以看到更改(即活动日志);

预览

注意:过滤器是 Backpack\PRO 功能的一部分。如果您没有该包,则过滤器将不可用。

演示

现在就在我们的在线演示中试试吧,这里。编辑一些实体,并检查 活动日志

安装

在您的 Laravel + Backpack 项目中,安装此包

# install this interface package:
composer require backpack/activity-log

# add a menu item for it
php artisan backpack:add-menu-content "<x-backpack::menu-item title=\"Activity Logs\" icon=\"la la-stream\" :link=\"backpack_url('activity-log')\" />"

但还要,如果您包中尚未安装并设置 spatie/laravel-activitylog,请 按照他们的文档中的安装步骤进行。我们也会在这里复制粘贴它们,以便您方便使用。

php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-config"
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations"
php artisan migrate

用法

注意:如果您的模型尚未配置为创建活动日志,请 阅读有关如何记录所有模型事件的常见问题解答。如果您不确定,那么您尚未配置它们记录活动 - 请阅读。

活动日志列表视图

使用它来浏览所有活动、筛选视图、搜索视图等。

Backpack ActivityLog list view

活动日志显示视图

使用它来查看特定活动的详细信息。

Backpack ActivityLog show view

CrudController 操作

如果您想使您的 CrudControllers 显示指向其活动的链接,只需使用提供的 Backpack 操作之一或两个即可。

  • ModelActivityOperation:显示一个通用按钮,允许用户查看该模型的所有活动列表。
  • EntryActivityOperation:为列表中的每个条目添加行按钮,使用户能够查看特定条目的活动日志。

ModelActivityOperation - 在 CrudController 中显示指向该模型活动日志的链接

假设您有一个 UserCrudController。如果您想在 “添加用户”按钮 旁边显示一个新按钮,该按钮将带您进入所有用户的全部活动,请使用 \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation 在您的 UserCrudController 中。

<?php

namespace App\Http\Controllers\Admin;

...

class ArticleCrudController extends CrudController
{
    ...
+    use \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation;
    ...

EntryActivityOperation - 在 CrudController 中显示指向每个条目活动日志的链接

假设你有一个 UserCrudController。如果你想在每个条目旁边显示一个新的按钮,点击后可以查看该条目的所有活动,那么在你的 UserCrudController 中使用 \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation

<?php

namespace App\Http\Controllers\Admin;

...

class ArticleCrudController extends CrudController
{
    ...
+    use \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation;
    ...

链接选项 - 主题 / 触发者

ModelActivityOperationEntryActivityOperation 按钮将指向活动日志页面,当前模型作为 主题。如果你的模型是 触发者(执行操作的个体,通常是 User 模型),你可以将操作选项设置为触发者。

class ArticleCrudController extends CrudController
{
    ...
    public function setup()
    {
        ...
+        CRUD::set('activity-log.options', ActivityLogEnum::CAUSER);
    }

常见问题解答

默认情况下记录了什么内容?

默认情况下,不记录任何内容。请根据您的需求配置 spatie/laravel-activitylog 来进行记录。下面的问题将提供最常见的用例。

如何记录模型事件(createdupdateddeleted 等)

注意:这不是本包提供的功能。这是由 spatie/laravel-activitylog 提供的。但我们尽量记录最常见的用例,以便您更容易实现。

你希望在模型被 createdupdateddeleted 等操作时注册一个新的活动吗?这样就可以记录谁做了什么,以及何时发生的?以下是设置 spatie/laravel-activitylog 记录所有模型事件的步骤。

步骤 1.App\Models\Traits\LogsActivity.php 创建一个新的模型特质,内容如下

<?php

namespace App\Models\Traits;

use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity as OriginalLogsActivity;

trait LogsActivity
{
    use OriginalLogsActivity;

    /**
     * Spatie Log Options
     * By default will log only the changes between fillables
     *
     * @return LogOptions
     */
    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()->logAll()->logOnlyDirty();
    }
}

步骤 2. 在所有需要记录所有事件模型的模型上使用该特质

<?php

namespace App\Models;

+use App\Models\Traits\LogsActivity;
use Backpack\CRUD\app\Models\Traits\CrudTrait;

class Article extends Model
{
    use CrudTrait;
+   use LogsActivity;
    ...

注意,此特质扩展了默认的 Spatie\Activitylog\Traits\LogsActivity 并定义了 getActivitylogOptions() 方法,提供了一些合理的默认值。如果您需要自定义,请参阅 此处详情此处选项

如何自定义记录的内容?

要自定义记录的信息,您可以在模型中重写 getActivitylogOptions 方法。

public function getActivitylogOptions(): LogOptions
{
    return LogOptions::defaults()
        ->logFillable()
        ->logOnlyDirty();
}

我可以进一步自定义日志吗?

是的,您可以!Spatie laravel-activitylog 包提供了一系列高级自定义选项。有关这些选项的详细信息,请参阅 Spatie 官方日志选项文档,见 https://spatie.be/docs/laravel-activitylog/v4/api/log-options

我正在使用 backpack/permission-manager,因此我没有访问 UserCrudController

如果您尚未自定义您的 UserCrudController,您可以通过将 Backpack 控制器绑定到您自定义的控制器来实现此操作。在您的 App\Providers\AppServiceProvider.php

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->bind(
            \Backpack\PermissionManager\app\Http\Controllers\UserCrudController::class,
            \App\Http\Controllers\Admin\UserCrudController::class
        );

然后在您的 App\Http\Controllers\Admin\UserCrudController.php 中,您可以这样做

use Backpack\PermissionManager\app\Http\Controllers\UserCrudController as OriginalUserCrudController;

class UserCrudController extends OriginalUserCrudController
{
    use \Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation;
    use \Backpack\ActivityLog\Http\Controllers\Operations\EntryActivityOperation;
}

安全

如果您发现任何安全相关的问题,请通过电子邮件发送到 cristian.tabacitu@backpackforlaravel.com 而不是使用问题跟踪器。

鸣谢

许可证

本项目在 MIT 许可证下发布,因此您可以将其安装在任何 Backpack & Laravel 项目上。有关更多信息,请参阅 许可证文件