inani / maravel-permissions
A Laravel Package that handle roles and permissions for the user
2.1
2021-02-20 15:38 UTC
Requires
- illuminate/support: ~5|~6|~7|~8
Requires (Dev)
- fzaninotto/faker: ~1.4
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-10-20 23:53:41 UTC
README
Download
composer require inani/maravel-permissions
Installation
Then include the service provider inside config/app.php
. (You can skipp it if it's in Laravel 5.5 or higher)
'providers' => [ ... Inani\Maravel\Providers\MaravelServiceProvider::class, ... ];
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
<?php return [ // Define the list of actions to be checked against 'actions' => [ 'add', 'delete', 'create', 'search', 'update' ], // define the class path for the entities 'entities' => [ \App\Models\User::class, ], ];
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; ... }
Usage
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') ->havingPower([ '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) ->grant([ '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 $user->roleManager()->blessWith($storm); // check if it has the ability $user->roleManager()->owns($ability); // check if it has one of the provided abilities $user->roleManager()->ownsOneOf([$ability, $anOtherAbility]); // make it human again (remove its role) $user->roleManager()->humanize();
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 $writer->grant($ability); // remove a certain ability $writer->takeOff($ability); // remove all and keep only those $abilities = [1, 2]; // or the models $writer->keep($abilities); // bless it to our user $user = \App\Models\User::first(); $user->roleManager()->blessWith($writer);
Am I missing something?
Submit a PR or issue with details!