Skip to content

Latest commit

 

History

History
213 lines (167 loc) · 6.75 KB

README.md

File metadata and controls

213 lines (167 loc) · 6.75 KB

Backpack\PermissionManager

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Style CI Total Downloads

An admin interface to easily add/edit/remove users, roles and permissions, using Laravel Backpack. As opposed to some other packages:

  • a user can have multiple roles;
  • a user can have extra permissions, in addition to the permissions on the roles he has;

Edit a user in Backpack/PermissionManager

Install

  1. In your terminal:
$ composer require backpack/permissionmanager
  1. Add the service provider to your config/app.php file:
Backpack\PermissionManager\PermissionManagerServiceProvider::class,
  1. Publish the config file & run the migrations
$ php artisan vendor:publish --provider="Backpack\PermissionManager\PermissionManagerServiceProvider" #publish config file
$ php artisan migrate --path=vendor/backpack/permissionmanager/src/database/migrations #create the role and permission tables
  1. Use the following traits on your User model:
<?php namespace App;

use Backpack\CRUD\CrudTrait; // <------------------------------- this one
use Spatie\Permission\Traits\HasRoles;// <---------------------- and this one
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable
{
    use CrudTrait; // <----- this
    use HasRoles; // <------ and this

    /**
     * Your User Model content
     */
  1. [Optional] Add a menu item for it in resources/views/vendor/backpack/base/inc/sidebar.blade.php or menu.blade.php:
<!-- Users, Roles Permissions -->
  <li class="treeview">
    <a href="#"><i class="fa fa-group"></i> <span>Users, Roles, Permissions</span> <i class="fa fa-angle-left pull-right"></i></a>
    <ul class="treeview-menu">
      <li><a href="{{ url('admin/user') }}"><i class="fa fa-user"></i> <span>Users</span></a></li>
      <li><a href="{{ url('admin/role') }}"><i class="fa fa-group"></i> <span>Roles</span></a></li>
      <li><a href="{{ url('admin/permission') }}"><i class="fa fa-key"></i> <span>Permissions</span></a></li>
    </ul>
  </li>

API Usage

Because the package requires spatie/laravel-permission, the API will be the same:

Using permissions

A permission can be given to a user:

$user->givePermissionTo('edit articles');

A permission can be revoked from a user:

$user->revokePermissionTo('edit articles');

You can test if a user has a permission:

$user->hasPermissionTo('edit articles');

Saved permissions will be registered with the Illuminate\Auth\Access\Gate-class. So you can test if a user has a permission with Laravel's default can-function.

$user->can('edit articles');

Using roles and permissions

A role can be assigned to a user:

$user->assignRole('writer');

A role can be removed from a user:

$user->removeRole('writer');

You can determine if a user has a certain role:

$user->hasRole('writer');

You can also determine if a user has any of a given list of roles:

$user->hasAnyRole(Role::all());

You can also determine if a user has all of a given list of roles:

$user->hasAllRoles(Role::all());

The assignRole, hasRole, hasAnyRole, hasAllRoles and removeRole-functions can accept a string, a Role-object or an \Illuminate\Support\Collection-object.

A permission can be given to a role:

$role->givePermissionTo('edit articles');

You can determine if a role has a certain permission:

$role->hasPermissionTo('edit articles');

A permission can be revoked from a role:

$role->revokePermissionTo('edit articles');

The givePermissionTo and revokePermissionTo-functions can accept a string or a Permission-object.

Saved permission and roles are also registered with the Illuminate\Auth\Access\Gate-class.

$user->can('edit articles');

Using blade directives

This package also adds Blade directives to verify whether the currently logged in user has all or any of a given list of roles.

@role('writer')
    I\'m a writer!
@else
    I\'m not a writer...
@endrole
@hasrole('writer')
    I\'m a writer!
@else
    I\'m not a writer...
@endhasrole
@hasanyrole(Role::all())
    I have one or more of these roles!
@else
    I have none of these roles...
@endhasanyrole
@hasallroles(Role::all())
    I have all of these roles!
@else
    I don\'t have all of these roles
@endhasallroles

You can use Laravels native @can directive to check if a user has a certain permission.

Change log

Please see CHANGELOG for more information what has changed recently.

Screenshots

Roles table view in Backpack/PermissionManager

Testing

// TODO

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.