2017 © Pedro Peláez
 

library laravel-rbac

Laravel RBAC implementation.

image

smart-crowd/laravel-rbac

Laravel RBAC implementation.

  • Thursday, November 17, 2016
  • by klermonte
  • Repository
  • 12 Watchers
  • 19 Stars
  • 1,142 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 9 Forks
  • 1 Open issues
  • 8 Versions
  • 0 % Grown

The README.md

Laravel RBAC

Laravel 5 RBAC implementation, (*1)

Package was inspired by RBAC module from Yii Framework, (*2)

Installation

  1. Run, (*3)

    composer require "smart-crowd/laravel-rbac":"dev-master"
    
  2. Add service provider and facade into /config/app.php file., (*4)

    'providers' => [
        ...
    
        SmartCrowd\Rbac\RbacServiceProvider::class,
    ],
    ...
    
    'aliases' => [
        ...
    
        'Rbac' => 'SmartCrowd\Rbac\Facades\Rbac'
    ]
    
  3. Publish package configs, (*5)

    php artisan vendor:publish
    
  4. Implement Assignable contract in your user model. And use AllowedTrait., (*6)

    use SmartCrowd\Rbac\Traits\AllowedTrait;
    use SmartCrowd\Rbac\Contracts\Assignable;
    
    class User extends Model implements Assignable
    {
        use AllowedTrait;
    
        /**
         * Should return array of permissions and roles names,
         * assigned to user.
         *
         * @return array Array of user assignments.
         */
        public function getAssignments()
        {
            // your implementation here
        }
        ...
    }
    

Usage

  1. Describe you permissions in /Rbac/items.php, (*7)

  2. Use inline in code, (*8)

    if (Auth::user()->allowed('article.delete', ['article' => $article])) {
        // user has access to 'somePermission.name' permission
    }
    
  3. Or in middleware, (*9)

    Route::delete('/articles/{article}', [
        'middleware' => 'rbac:article.delete', 
        'uses' => 'ArticlesController@delete'
    ]);
    

    Of course, don't forget to register middleware in /Http/Kernel.php file, (*10)

    protected $routeMiddleware = [
        ...
        'rbac' => 'SmartCrowd\Rbac\Middleware\RbacMiddleware',
    ];
    

    To use route parameters in business rules as models instead just ids, you should bind it in RouteServicePrivider.php:, (*11)

    public function boot(Router $router)
    {
        //...
        $router->model('article', '\App\Article');
    
        parent::boot($router);
    }
    

    There are 3 ways to bind permission name to action name:, (*12)

    • middleware paramenter
    • bind they directelly in /Rbac/actions.php file
    • name permission like action, for example article.edit for ArticleController@edit action
  4. Or in your views, (*13)

    @allowed('article.edit', ['article' => $article])
        <a href="{{ route('edit', ['article' => $article]) }}">edit</a>
    @else
        <span>You can not edit this article</span>
    @endallowed
    

    If rbac.shortDirectives option are enabled, you can use shorter forms of directives, like this:, (*14)

    @allowedArticleEdit(['article' => $article])
        {{ $some }}
    @endallowed
    
    @allowedIndex
        {{ $some }}
    @endallowed
    

Context Roles

In some cases, you may want to have dynamically assigned roles. For example, the role groupModerator is dynamic, because depending on the current group, the current user may have this role, or may not have. In our terminology, this role are "Context Role", and current group is "Role Context". The context decides which additional context roles will be assigned to the current user. In our case, Group model should implement RbacContext interface, and method getAssignments($user)., (*15)

When checking is enough to send context model among other parameters:, (*16)

@allowed('group.post.delete', ['post' => $post, 'group' => $group]) // or $post->group
    post delete button
@endallowed

But for automatic route check in middleware we usually send only post without group:, (*17)

Route::delete('/post/{post}', [
    'middleware' => 'rbac:group.post.delete', 
    'uses' => 'PostController@delete'
]);

For this case you can implement RbacContextAccesor intarface by Post model. getContext() method should return Group model. Then you just have to send only the post, and context roles will be applied in middleware to:, (*18)

@allowed('group.post.delete', ['post' => $post])
    post delete button
@endallowed

You can not do that, if you send context with subject:, (*19)

Route::delete('/group/{group}/post/{post}', [
    'middleware' => 'rbac:group.post.delete', 
    'uses' => 'PostController@delete'
]);

The Versions

17/11 2016

v0.2.x-dev

0.2.9999999.9999999-dev

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control

18/02 2016

dev-laravel-latest

dev-laravel-latest

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control

15/02 2016

dev-master

9999999-dev

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control

27/01 2016

dev-laravel-5.0

dev-laravel-5.0

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control

24/10 2015

v0.1.3

0.1.3.0

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control

06/10 2015

v0.1.2

0.1.2.0

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control

17/08 2015

v0.1.1

0.1.1.0

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control

14/07 2015

v0.1

0.1.0.0

Laravel RBAC implementation.

  Sources   Download

MIT

The Requires

 

The Development Requires

by Paul Klementev
by Yuri Agapov

laravel acl rbac role-based access control