sajtiii / laravel-lockable-attributes
Lock your eloquent model attributes to prevent changes on them.
Installs: 230
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:package
Requires
- php: ^8.1
- laravel/framework: ^10.0||^11.0
Requires (Dev)
- filament/forms: ^3.2
- larastan/larastan: ^2.9
- laravel/pint: ^1.18
- orchestra/testbench: ^8.0||^9.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
README
This package allows you to easily lock model attributes preventing them from a sudden override.
Usage
- Setup database
Add a json column to your database table named however you want, but preferablylocked_attributes
.
Schema::create('my_models', function (Blueprint $table) { ... $table->json('locked_attributes'); ... });
- Prepare your model
Add theHasLockedAttributes
interface andInteractsWithLockedAttributes
trait to your model:
use Sajtiii\LockableAttributes\Concerns\InteractsWithLockedAttributes; use Sajtiii\LockableAttributes\Contracts\HasLockedAttributes; class MyModel extends Model implements HasLockedAttributes { use InteractsWithLockedAttributes; ... }
- Define which attributes can be locked.
Add thegetLockableAttributes()
method to your model:
class MyModel extends Model implements HasLockedAttributes { use InteractsWithLockedAttributes; public function getLockableAttributes(): array { return [ 'name', 'title', ... ]; }
Filament support
This package also comes with a form action for Filament, that can be added to form components allowing you to easily lock attributes on the resource page.
Limitations: This action currently can only be used on the view page of the resource.
Example (Adding the toggle action to a TextInput
):
use Filament\Forms\Components\TextInput; use Sajtiii\LockableAttributes\Contracts\HasLockedAttributes; use Sajtiii\LockableAttributes\Filament\Forms\Actions\ToggleAttributeLockAction; TextInput::make('name') ->suffixAction(ToggleAttributeLockAction::make('lock')) ->disabled(fn (?HasLockedAttributes $record) => $record && $record->isAttributeLocked($this->getStatePath(false))),