2017 © Pedro Pelรกez
 

library model-locking

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

image

sofa/model-locking

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  • Sunday, March 4, 2018
  • by jarektkaczyk
  • Repository
  • 2 Watchers
  • 26 Stars
  • 11,159 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 7 Forks
  • 0 Open issues
  • 19 Versions
  • 11 % Grown

The README.md

Sofa/ModelLocking

Build Status Coverage Status Downloads stable, (*1)

Pseudo pessimistic model locking for the Eloquent ORM (Laravel 5.3+)., (*2)

Installation

Package goes along with Laravel (Illuminate) versioning for your convenience:, (*3)

Laravel / Illuminate 5.3+:, (*4)

  1. require package: composer require sofa/model-locking:"~5.3"
  2. if you're using Laravel 5.1 - 5.4, add to your config/app.php under providers: Sofa\ModelLocking\ServiceProvider::class,,
    if you're using Laravel 5.5+ the service provider will register itself automatically
  3. publish package assets: php artisan vendor:publish --provider="Sofa\ModelLocking\ServiceProvider"
  4. create model locks table by running php artisan migrate
  5. add trait use \Sofa\ModelLocking\Locking to the model that should offer locking
  6. OPTIONALLY customize package config in config/model_locking.php

Usage

Basic example:, (*5)

// controller
public function edit(Post $post)
{
    if ($post->isLocked()) {
        return response([
            'status' => 'locked',
            'message' => 'Resource you are trying to access is locked',
            'lock_expiration' => $post->lockedUntil(),
        ], 423);
    }

    return view('posts.edit', compact('post'));
}

public function update(Post $post)
{
    if ($post->isAccessible(request('lock_token'))) {
        return redirect()->back()
                         ->withErrors(['danger' => 'Resource you are trying to update is locked']);
    }

    $post->update(request()->all());
    // broadcasts ModelUnlocked event, so you can push notification
    // to the user who tried to access locked post.
    $post->unlock();

    return redirect('posts.index');
}

public function requestUnlock(Post $post)
{
    if ($post->isAccessible()) {
        $token = $post->lock('5 minutes', auth()->user());

        return response([
            'status' => 'unlocked',
            'message' => 'Resource is now locked by you',
            'lock_expiration' => $post->lockedUntil(),
            'lock_token' => $token,
        ]);
    }

    // broadcasts ModelUnlockRequested event, so you can push
    // notification to the user who locked the resource.
    $post->requestUnlock(auth()->user(), request('unlock_message'));
}

// app/Console/Kernel - it will remove expired locks
//                      AND fire ModelUnlocked event for all of them
$schedule->command('locks:flush')->everyMinute();


// Available broadcasting events:
// new ModelLocked($post)
// new ModelUnlocked($post)
// new ModelUnlockRequested($post, $requesting_user, $request_message)

soon more in-depth info, meanwhile take a look at the specs:, (*6)

  /\ /\__ _| |__ | | __ _ _ __
 / //_/ _` | '_ \| |/ _` | '_ \
/ __ \ (_| | | | | | (_| | | | |
\/  \/\__,_|_| |_|_|\__,_|_| |_|

Sofa\ModelLocking\Locking
  โœ” it checks if active lock for model exists
  โœ” it checks if existing lock is still active
  โœ” it gets user who locked model
  โœ” it gets null as timestamp and user if model is not locked
  โœ” it sets by default authenticated user as one who is locking the model
  โœ” it unlocks the model on demand
  โœ” it lets you request unlock of a locked model
  โœ” it allows setting lock shortening when unlock request is made
  โœ” it verifies if model can be accessed with provided token
  โœ” it allows passing user_id as locking user
  โœ” it allows passing user instance as only param to `lock` method
  Lock duration precedence
    โœ” it locks the model for provided time by given user
    โœ” it next takes `lock_duration` property if set on the model
    โœ” it then falls back to the config
    โœ” it finally gets the default value: 5 minutes
  Fires broadcasting events to make push notifications a cinch
    โœ” it fires event when model is being locked
    โœ” it fires event when model is being unlocked
    โœ” it fires event when unlock request is made, with optional: requesting user and his message


Executed 23 of 23 PASS in 0.337 seconds

Contribution

All contributions are welcome, PRs must be tested (using kahlan) and PSR-2 compliant., (*7)

The Versions

04/03 2018

5.5.x-dev

5.5.9999999.9999999-dev

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

04/03 2018

dev-master

9999999-dev

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

04/03 2018

5.6

5.6.0.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

15/01 2018

v5.5.1

5.5.1.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

26/09 2017

v5.5

5.5.0.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

30/03 2017

5.4.x-dev

5.4.9999999.9999999-dev

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

30/03 2017

v5.4.3

5.4.3.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

29/03 2017

v5.4.2

5.4.2.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

08/03 2017

v5.4.1

5.4.1.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

08/03 2017

v5.4

5.4.0.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

17/11 2016

5.3.x-dev

5.3.9999999.9999999-dev

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

17/11 2016

v5.3.1

5.3.1.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

17/11 2016

5.2.x-dev

5.2.9999999.9999999-dev

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

17/11 2016

v5.2.1

5.2.1.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

17/11 2016

5.1.x-dev

5.1.9999999.9999999-dev

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

17/11 2016

v5.1.1

5.1.1.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

06/09 2016

v5.2

5.2.0.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

06/09 2016

v5.1

5.1.0.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock

04/09 2016

v5.3

5.3.0.0

Pseudo pessimistic model locking with broadcasted events for Laravel Eloquent ORM.

  Sources   Download

MIT

The Requires

 

The Development Requires

orm laravel eloquent locking active record pessimistic lock model lock