chenalon/laravel-backlog-activity-log

Backpack的活动日志

dev-main 2023-10-17 19:04 UTC

This package is auto-updated.

Last update: 2024-09-17 21:13:41 UTC


README

Latest Version on Packagist Total Downloads The Whole Fruit Manifesto

是否曾经想要看到谁在何时修改了应用内的什么内容?想要记住用户所做的所有数据库更改?嗯,这个包不能做到这一点。但是spatie/laravel-activitylog可以,并且做得很好。这个包为使用Backpack for Laravel的项目添加了一个网页界面,使管理员/超级管理员能够看到

  • 某些模型执行的活动;
  • 在特定模型上执行的活动;
  • 等等;

这一切是如何工作的呢?嗯

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

预览

演示

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

安装

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

# install this interface package:
composer require chenalon/laravel-backlog-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。如果您想在添加用户按钮旁边显示一个新的按钮,该按钮将带您进入所有用户的全部活动,则请在您的UserCrudController上使用\Backpack\ActivityLog\Http\Controllers\Operations\ModelActivityOperation

<?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;
    ...

常见问题解答

默认情况下记录了什么?

默认情况下,没有任何内容被记录。请根据您的需求配置spatie/laravel-activitylog进行记录。请参阅以下问题,了解最常见的用例。

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

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

您希望每当模型被 createdupdateddeleted 等操作时注册一个新的 Activity 吗?以便记录谁做了什么以及何时发生?以下是设置 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 项目上安装它。有关更多信息,请参阅许可证文件