Mar 12, 2025
0
Level 6
How to prevent user role (customer) from logging an event?
Case is if the user role is customer if will prevent from logging an activity. I make a trait on this
<?php
namespace App\Models\Traits;
use App\Models\User;
use App\Enums\User\Role;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Contracts\Activity;
use Spatie\Activitylog\Traits\LogsActivity;
trait HasLogActivity
{
use LogsActivity;
protected function mergeActivityProperties(Activity $activity)
{
$activity->properties = $activity->properties->merge([
'ip' => getRequestIP(request()),
'user_agent' => request()->userAgent(),
]);
}
public function tapActivity(Activity $activity, string $eventName)
{
$this->mergeActivityProperties($activity);
if ($activity->causer && $activity->causer instanceof User) {
if ($activity->causer->role->value === Role::Customer) {
$activity->disableLogging();
return;
}
$activity->causer_role = $activity->causer->role->value;
}
}
public function getActivitylogOptions(): LogOptions
{
return LogOptions::defaults()
->logAll()
->logExcept(['created_at', 'updated_at'])
->logOnlyDirty()
->dontSubmitEmptyLogs()
->setDescriptionForEvent(fn(string $eventName) => "This model has been {$eventName}")
->useLogName(class_basename($this));
}
}
Please or to participate in this conversation.