rmsramos/activitylog

这是我打包的 activitylog 包

v1.0.6 2024-09-22 23:34 UTC

README

Spatie/Laravel-activitylog for Filament

Latest Version on Packagist Software License GitHub Code Style Action Status Total Downloads

Screenshot of Application Feature

此包提供了一个 Filament 资源,显示所有活动日志以及使用 spatie/laravel-activitylog 包创建的每个日志的详细视图。它还提供了相关模型的关系管理器。

需求

  • Laravel v11
  • Filament v3
  • Spatie/Laravel-activitylog v4

支持的语言

ActivityLog 插件已翻译为

  • 🇧🇷 巴西葡萄牙语
  • 🇺🇸 英语
  • 🇪🇸 西班牙语
  • 🇫🇷 法语
  • 🇮🇷 波斯语
  • 🇦🇪 阿拉伯语
  • 🇵🇹 葡萄牙语

安装

您可以通过 composer 安装此包

composer require rmsramos/activitylog

之后运行安装命令

php artisan activitylog:install

这将发布来自 spatie/laravel-activitylog 的配置和迁移

并运行迁移

php artisan migrate

您可以使用以下命令手动发布配置文件

php artisan vendor:publish --tag="activitylog-config"

这是已发布配置文件的内容

return [
    'resources' => [
        'label'                     => 'Activity Log',
        'plural_label'              => 'Activity Logs',
        'navigation_item'           => true,
        'navigation_group'          => null,
        'navigation_icon'           => 'heroicon-o-shield-check',
        'navigation_sort'           => null,
        'default_sort_column'       => 'id',
        'default_sort_direction'    => 'desc',
        'navigation_count_badge'    => false,
        'resource'                  => \Rmsramos\Activitylog\Resources\ActivitylogResource::class,
    ],
    'datetime_format' => 'd/m/Y H:i:s',
];

可选地,您可以使用以下命令发布视图

php artisan vendor:publish --tag="activitylog-views"

用法

基本的 Spatie ActivityLog 使用方法

在您的 Model 中添加 Spatie\Activitylog\Traits\LogsActivity 特性,并配置 getActivitylogOption 函数

有关更多配置,请参阅 Spatie 文档

use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;

class NewsItem extends Model
{
    use LogsActivity;

    protected $fillable = ['name', 'text'];

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
        ->logOnly(['name', 'text']);
    }
}

插件使用

Screenshot of Application Feature

在您的 Panel ServiceProvider (App\Providers\Filament) 中激活插件

Rmsramos\Activitylog\ActivitylogPlugin 添加到您的面板配置中

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make(),
        ]);
}

自定义 ActivitylogResource

您可以通过更新 ->resource() 的值来替换使用的 ActivitylogResource。使用此功能创建自己的 CustomResource 类并扩展原始的 \Rmsramos\Activitylog\Resources\ActivitylogResource::class。这将允许您自定义一切,如视图、表、表单和权限。

注意

如果您希望更改列表和视图页面上的资源,请确保在新的资源上替换 getPages 方法,并创建自己的 ListPageViewPage 类以引用自定义的 CustomResource

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->resource(\Path\For\Your\CustomResource::class),
        ]);
}

自定义标签资源

您可以通过更新 ->label()->pluralLabel() 的值来替换使用的 Resource label

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->label('Log')
                ->pluralLabel('Logs'),
        ]);
}

在导航中显示资源

您可以通过更新 ->navigationItem() 的值来启用或禁用 Resource navigation item

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->navigationItem(false), // by default is true
        ]);
}

分组资源导航项

您可以通过更新 ->navigationGroup() 的值来添加 Resource navigation group

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->navigationGroup('Activity Log'),
        ]);
}

自定义资源导航图标

您可以通过更新 ->navigationIcon() 的值来替换使用的 Resource navigation icon

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->navigationIcon('heroicon-o-shield-check'),
        ]);
}

激活计数徽章

您可以通过更新 ->navigationCountBadge() 的值来激活 Count Badge

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->navigationCountBadge(true),
        ]);
}

设置导航排序

您可以通过更新 ->navigationSort() 的值来设置 Resource navigation sort

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->navigationSort(3),
        ]);
}

授权

如果您希望阻止某些用户访问日志资源,请在 ActivitylogPlugin 链中添加授权回调。

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->authorize(
                    fn () => auth()->user()->id === 1
                ),
        ]);
}

角色策略

要确保通过角色策略访问 ActivitylogResource,您需要在 AppServiceProvider 中添加以下内容

use App\Policies\ActivityPolicy;
use Illuminate\Support\Facades\Gate;
use Spatie\Activitylog\Models\Activity;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Gate::policy(Activity::class, ActivityPolicy::class);
    }
}

完整配置

use Rmsramos\Activitylog\ActivitylogPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            ActivitylogPlugin::make()
                ->resource(\Path\For\Your\CustomResource::class)
                ->label('Log')
                ->pluralLabel('Logs')
                ->navigationItem(true)
                ->navigationGroup('Activity Log')
                ->navigationIcon('heroicon-o-shield-check')
                ->navigationCountBadge(true)
                ->navigationSort(2)
                ->authorize(
                    fn () => auth()->user()->id === 1
                ),
        ]);
}

关系管理器

如果您有一个使用 Spatie\Activitylog\Traits\LogsActivity 特性的模型,您可以向 Filament 资源添加 Rmsramos\Activitylog\RelationManagers\ActivitylogRelationManager 关系管理器,以显示对您的模型执行的所有活动日志。 应用功能的截图

use Rmsramos\Activitylog\RelationManagers\ActivitylogRelationManager;

public static function getRelations(): array
{
    return [
        ActivitylogRelationManager::class,
    ];
}

时间轴操作

Screenshot of Application Feature

为了使查看活动日志更容易,您可以使用自定义操作。在表函数中的 UserResource 中,添加 ActivityLogTimelineTableAction

use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction;

public static function table(Table $table): Table
{
    return $table
        ->actions([
            ActivityLogTimelineTableAction::make('Activities'),
        ]);
}

您可以通过传递一个包含关系的矩阵,记得配置您的 Models

public static function table(Table $table): Table
{
    return $table
        ->actions([
            ActivityLogTimelineTableAction::make('Activities')
                ->withRelations(['profile', 'address']), //opcional
        ]);
}

您可以通过配置图标和颜色,默认使用 'heroicon-m-check' 图标和 'primary' 颜色。

use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction;

public static function table(Table $table): Table
{
    return $table
        ->actions([
            ActivityLogTimelineTableAction::make('Activities')
                ->timelineIcons([
                    'created' => 'heroicon-m-check-badge',
                    'updated' => 'heroicon-m-pencil-square',
                ])
                ->timelineIconColors([
                    'created' => 'info',
                    'updated' => 'warning',
                ])
        ]);
}

您可以通过传递一个限制来限制查询中的结果数量,默认返回最后 10 条记录。

use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction;

public static function table(Table $table): Table
{
    return $table
        ->actions([
            ActivityLogTimelineTableAction::make('Activities')
                ->limit(30),
        ]);
}

完整时间轴配置

use Rmsramos\Activitylog\Actions\ActivityLogTimelineTableAction;

public static function table(Table $table): Table
{
    return $table
        ->actions([
            ActivityLogTimelineTableAction::make('Activities')
                ->withRelations(['profile', 'address'])
                ->timelineIcons([
                    'created' => 'heroicon-m-check-badge',
                    'updated' => 'heroicon-m-pencil-square',
                ])
                ->timelineIconColors([
                    'created' => 'info',
                    'updated' => 'warning',
                ])
                ->limit(10),
        ]);
}

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

请查阅 我们的安全策略 了解如何报告安全漏洞。

致谢

特别感谢这些杰出的工具和人们(开发者),活动日志插件的存在得益于他们的启发,以及在某个时刻使用了这些人的代码。

鸣谢

许可协议

MIT 许可协议(MIT)。请参阅 许可文件 获取更多信息。