A Laravel Package that handle roles and permissions for the user

2.1 2021-02-20 15:38 UTC

This package is auto-updated.

Last update: 2021-09-20 16:50:53 UTC




composer require inani/maravel-permissions


Then include the service provider inside config/app.php. (You can skipp it if it's in Laravel 5.5 or higher)

'providers' => [

Publish resources, and migrate

php artisan vendor:publish

PS : You can edit 2020_05_27_221346_add_role_id_to_users migration to link it with the correct user table

Edit the config/maravels.php with the correct values


return [
    // Define the list of actions to be checked against
    'actions' => [
        'add', 'delete', 'create', 'search', 'update'

    // define the class path for the entities
    'entities' => [

And then migrate

php artisan migrate

Setup a Model

To setup the user model, all you have to do is add (and import) the IsMarvel trait.

use Inani\Maravel\HasRole;

class User extends Model
    use HasRole;


All roles are role and permissions are powers

Because every user deserves to be a hero, The Maravel API is based on the Marvel Jargon, and here are how it can be used

// Having a user
$user = User::first();

// Create a new role, description is not mandotary
$userManager = RoleBuilder::create('User Manager', 'The role to manage users')
                   'name' => 'can_update',
                   'description' => 'The abilitiy to update a user',
                   'action' => 'update',
                   'entity' => \App\Models\User::class,

// we can grant a power to it
$userManager = RoleBuilder::of($userManager)
                             'name' => 'can_create',
                             'description' => 'The abilitiy to create a user',
                             'action' => 'create',
                             'entity' => \App\Models\User::class,

// Or take it off
$ability = Ability::first();

$storm = RoleBuilder::of($userManager)->takeOff($ability);

// bless the user with the abilities of the role

// check if it has the ability

// check if it has one of the provided abilities
$user->roleManager()->ownsOneOf([$ability, $anOtherAbility]);

// make it human again (remove its role)

You can also manage the instances directly

// Create Ability
$ability = Ability::create([
    'name' => 'post_write',
    'description' => 'Abitlity to create new Posts',
    'action' => 'add',
    'entity' => \App\Models\Post::class,

// Create a Marvel
$writer = Role::create([
    'name' => 'Webmaster',
    'description' => 'A Role that allows you create new posts'

// Grant the ability

// remove a certain ability

// remove all and keep only those
$abilities = [1, 2]; // or the models

// bless it to our user
$user = \App\Models\User::first();


Am I missing something?

Submit a PR or issue with details!