PHP code example of kenepa / resource-lock

1. Go to this page and download the library: Download kenepa/resource-lock library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

kenepa / resource-lock example snippets


use Kenepa\ResourceLock\ResourceLockPlugin;
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugin(ResourceLockPlugin::make());
}

>    'resource' => [
>        'class' => \Kenepa\ResourceLock\Resources\LockResource::class,
>    ],
> 

// Post.php

use Kenepa\ResourceLock\Models\Concerns\HasLocks;

class Post extends Model
{
    use HasFactory;
    use HasLocks;

    protected $table = 'posts';

    protected $guarded = [];
}

// EditPost.php

use Kenepa\ResourceLock\Resources\Pages\Concerns\UsesResourceLock;

class EditPost extends EditRecord
{
    use UsesResourceLock;

    protected static string $resource = PostResource::class;
}

// ManagePosts.php

use Kenepa\ResourceLock\Resources\Pages\Concerns\UsesSimpleResourceLock;

class ManagePosts extends ManageRecords
{
    use UsesSimpleResourceLock;

    protected static string $resource = PostResource::class;

}

use Kenepa\ResourceLock\ResourceLockPlugin;
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugin(ResourceLockPlugin::make()
        ->usesPollingToDetectPresence()
        ->presencePollingInterval(10));
}

use Kenepa\ResourceLock\ResourceLockPlugin;
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->limitedAccessToResourceLockManager()
        ->gate('unlock')
}


// Example using gates
// More info about gates: https://laravel.com/docs/authorization#writing-gates
Gate::define('unlock', function (User $user, Post $post) {
  return $user->email === '[email protected]';
});

// Example using spatie permission package
Permission::create(['name' => 'unlock']);

use Kenepa\ResourceLock\ResourceLockPlugin;
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->userModel(\App\Models\CustomUser::class)
        ->resourceLockModel(\App\Models\CustomResourceLock::class);
}

// CustomGetResourceLockOwnerAction.php

namespace App\Actions;

use Kenepa\ResourceLock\Actions\GetResourceLockOwnerAction;

class CustomResourceLockOwnerAction extends GetResourceLockOwnerAction
{
    public function execute($userModel): string|null
    {
        return $userModel->email;
    }
}

use Kenepa\ResourceLock\ResourceLockPlugin;
use Filament\Panel;
 
public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->plugin(
            ResourceLockPlugin::make()
                ->resourceLockOwnerAction(\Kenepa\ResourceLock\Actions\CustomGetResourceLockOwnerAction::class)
        );
}

     public function resourceLockReturnUrl(): string 
    {
        return 'https://laracasts.com';
    }
bash
php artisan resource-lock:install
CustomGetResourceLockOwnerAction.php
bash
php artisan vendor:publish --tag="resource-lock-migrations"
php artisan migrate
bash
php artisan vendor:publish --tag="resource-lock-migrations"
php artisan migrate
bash
php artisan vendor:publish --tag="resource-lock-views"