Prerequisites | laravel-permission | Spatie

 SPATIE

  Laravel Permission
=====================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-permission](https://spatie.be/docs/laravel-permission/v3)  Prerequisites

 Version   v7   v6   v5   v4   v3

 Other versions for crawler [v7](https://spatie.be/docs/laravel-permission/v7) [v6](https://spatie.be/docs/laravel-permission/v6) [v5](https://spatie.be/docs/laravel-permission/v5) [v4](https://spatie.be/docs/laravel-permission/v4) [v3](https://spatie.be/docs/laravel-permission/v3)

  Prerequisites
- [ Introduction ](https://spatie.be/docs/laravel-permission/v3/introduction)
- [ Support us ](https://spatie.be/docs/laravel-permission/v3/support-us)
- [ Prerequisites ](https://spatie.be/docs/laravel-permission/v3/prerequisites)
- [ Installation in Laravel ](https://spatie.be/docs/laravel-permission/v3/installation-laravel)
- [ Installation in Lumen ](https://spatie.be/docs/laravel-permission/v3/installation-lumen)
- [ Upgrading ](https://spatie.be/docs/laravel-permission/v3/upgrading)
- [ Questions and issues ](https://spatie.be/docs/laravel-permission/v3/questions-issues)
- [ Changelog ](https://spatie.be/docs/laravel-permission/v3/changelog)
- [ About us ](https://spatie.be/docs/laravel-permission/v3/about-us)

Basic Usage
-----------

- [ Basic Usage ](https://spatie.be/docs/laravel-permission/v3/basic-usage/basic-usage)
- [ Direct Permissions ](https://spatie.be/docs/laravel-permission/v3/basic-usage/direct-permissions)
- [ Using permissions via roles ](https://spatie.be/docs/laravel-permission/v3/basic-usage/role-permissions)
- [ Wildcard permissions ](https://spatie.be/docs/laravel-permission/v3/basic-usage/wildcard-permissions)
- [ Blade directives ](https://spatie.be/docs/laravel-permission/v3/basic-usage/blade-directives)
- [ Defining a Super-Admin ](https://spatie.be/docs/laravel-permission/v3/basic-usage/super-admin)
- [ Using multiple guards ](https://spatie.be/docs/laravel-permission/v3/basic-usage/multiple-guards)
- [ Using artisan commands ](https://spatie.be/docs/laravel-permission/v3/basic-usage/artisan)
- [ Using a middleware ](https://spatie.be/docs/laravel-permission/v3/basic-usage/middleware)
- [ Example App ](https://spatie.be/docs/laravel-permission/v3/basic-usage/new-app)

Best Practices
--------------

- [ Roles vs Permissions ](https://spatie.be/docs/laravel-permission/v3/best-practices/roles-vs-permissions)
- [ Model Policies ](https://spatie.be/docs/laravel-permission/v3/best-practices/using-policies)
- [ Performance Tips ](https://spatie.be/docs/laravel-permission/v3/best-practices/performance)

Advanced usage
--------------

- [ Testing ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/testing)
- [ Database Seeding ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/seeding)
- [ Exceptions ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/exceptions)
- [ Extending ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/extending)
- [ Cache ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/cache)
- [ UUID ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/uuid)
- [ Extending PhpStorm ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/phpstorm)
- [ Other ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/other)
- [ Timestamps ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/timestamps)
- [ UI Options ](https://spatie.be/docs/laravel-permission/v3/advanced-usage/ui-options)

      You are viewing the documentation for **an older version** of this package. You can check the version you are using with the following command:

 `                                    composer show spatie/laravel-permission                                                                                                                                                                                                                                    `

Prerequisites
=============

This package can be used in Laravel 5.8 or higher.

This package uses Laravel's Gate layer to provide Authorization capabilities. The Gate/authorization layer requires that your `User` model implement the `Illuminate\Contracts\Auth\Access\Authorizable` contract. Otherwise the `can()` and `authorize()` methods will not work in your controllers, policies, templates, etc.

In the `Installation` instructions you'll see that the `HasRoles` trait must be added to the User model to enable this package's features.

Thus, a typical basic User model would have these basic minimum requirements:

```
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // ...
}
```

Additionally, your `User` model/object MUST NOT have a `role` or `roles` property (or field in the database), nor a `roles()` method on it. Those will interfere with the properties and methods added by the `HasRoles` trait provided by this package, thus causing unexpected outcomes when this package's methods are used to inspect roles and permissions.

Similarly, your `User` model/object MUST NOT have a `permission` or `permissions` property (or field in the database), nor a `permissions()` method on it. Those will interfere with the properties and methods added by the `HasPermissions` trait provided by this package (which is invoked via the `HasRoles` trait).

This package publishes a `config/permission.php` file. If you already have a file by that name, you must rename or remove it, as it will conflict with this package. You could optionally merge your own values with those required by this package, as long as the keys that this package expects are present. See the source file for more details.

 A good
match?
-------------

### What we do best

- All things Laravel
- Custom frontend components
- Building APIs
- AI-powered features
- Simplifying things
- Clean solutions
- Integrating services

### Not our cup of tea

- WordPress themes
- Cutting corners
- Free mockups to win a job
- "Just execute the briefing"

 In short: we'd like to be a **substantial part** of your project.

 [ Get in touch via email ](mailto:info@spatie.be?subject=A%20good%20match%21&body=Tell%20us%20as%20much%20as%20you%20can%20about%0A-%20your%20online%20project%0A-%20your%20planning%0A-%20your%20budget%0A-%20%E2%80%A6%0A%0AAnything%20that%20helps%20us%20to%20start%20straightforward%21)
