putheng/role

There is no license information available for the latest version (1.1) of this package.

A role and permission package for Laravel

1.1 2019-01-30 07:10 UTC

This package is auto-updated.

Last update: 2025-05-29 01:07:40 UTC


README

Require this package with composer.

composer require putheng/role

Laravel 5.5 uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider.

Setting up from scratch

Laravel 5.5+:

If you don't use auto-discovery, add the ServiceProvider to the providers array in config/app.php

Putheng\Role\RoleServiceProvider::class,

The schema

For Laravel 5 migration

php artisan migrate

The model

Your model should use Putheng\Role\Traits\HasPermissionsTrait trait to User model:

use Putheng\Role\Traits\HasPermissionsTrait;

class User extends Model {
    use HasPermissionsTrait;
}

Add to AppServiceProvider on boot method for Bootstrap services.

use Putheng\Role\Models\Permission;

Permission::get()->map(function($permission){
    Gate::define($permission->name, function($user) use ($permission){
        return $user->hasPermissionTo($permission);
    });
});

Middleware

Add RoleMiddleware to $routeMiddleware in App\Http\Kernel class

'role' => \Putheng\Role\RoleMiddleware::class,
Router
Route::group(['middleware' => 'role:admin'], function () {
    Route::group(['middleware' => 'role:admin,delete users'], function () {
        Route::get('/admin/users', function () {
            return 'Delete users in admin panel';
        });
    });

    Route::get('/admin', function () {
        return 'Admin panel';
    });
});

Usage

Check is user has roles

$user = User::find(1);

// multiple argument
$user->hasRole('admin', 'user');
// true or false 

Give role to

$user = User::find(1);

// multiple argument
$user->giveRoleTo('admin', 'user');
// true or false 

Refresh role

$user = User::find(1);

// multiple argument
$user->refreshRoles('admin', 'user');
// true or false 

Check is user has permission or permission through role

$user = User::find(1);

$user->hasPermissionTo('edit posts', 'delete posts');
// true or false 

// Use Laravel Gate can method
$user->can('edit posts');

Give permissions

$user = User::find(1);

$user->givePermissionTo(['edit posts', 'delete posts']);

Revoke permissions

$user = User::find(1);

$user->withdrawPermissionTo(['edit posts']);

Refresh permissions remove all user's permissions and re-give the permissions

$user = User::find(1);

$user->refreshPermissions(['edit posts']);

Custom blade what we output inside template Role

@role('admin')
    <a href="#">Admin panel</a>
@endrole

Permission

@permission('edit post')
    <a href="#">Edit post</a>
@endpermission