Installation in Lumen | laravel-permission | Spatie

 SPATIE

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

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-permission](https://spatie.be/docs/laravel-permission/v6)  Installation in Lumen

 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)

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

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

- [ Basic Usage ](https://spatie.be/docs/laravel-permission/v6/basic-usage/basic-usage)
- [ Direct Permissions ](https://spatie.be/docs/laravel-permission/v6/basic-usage/direct-permissions)
- [ Using Permissions via Roles ](https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions)
- [ Enums ](https://spatie.be/docs/laravel-permission/v6/basic-usage/enums)
- [ Teams permissions ](https://spatie.be/docs/laravel-permission/v6/basic-usage/teams-permissions)
- [ Wildcard permissions ](https://spatie.be/docs/laravel-permission/v6/basic-usage/wildcard-permissions)
- [ Blade directives ](https://spatie.be/docs/laravel-permission/v6/basic-usage/blade-directives)
- [ Defining a Super-Admin ](https://spatie.be/docs/laravel-permission/v6/basic-usage/super-admin)
- [ Using multiple guards ](https://spatie.be/docs/laravel-permission/v6/basic-usage/multiple-guards)
- [ Artisan Commands ](https://spatie.be/docs/laravel-permission/v6/basic-usage/artisan)
- [ Middleware ](https://spatie.be/docs/laravel-permission/v6/basic-usage/middleware)
- [ Passport Client Credentials Grant usage ](https://spatie.be/docs/laravel-permission/v6/basic-usage/passport)
- [ Example App ](https://spatie.be/docs/laravel-permission/v6/basic-usage/new-app)

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

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

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

- [ Testing ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/testing)
- [ Database Seeding ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/seeding)
- [ Exceptions ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/exceptions)
- [ Extending ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/extending)
- [ Cache ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/cache)
- [ Events ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/events)
- [ Custom Permission Check ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/custom-permission-check)
- [ UUID/ULID ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/uuid)
- [ PhpStorm Interaction ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/phpstorm)
- [ Other ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/other)
- [ Timestamps ](https://spatie.be/docs/laravel-permission/v6/advanced-usage/timestamps)
- [ UI Options ](https://spatie.be/docs/laravel-permission/v6/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                                                                                                                                                                                                                                    `

Installation in Lumen
=====================

###  On this page

1. [ Installing ](#content-installing)
2. [ User Model ](#content-user-model)
3. [ User Table ](#content-user-table)

NOTE: Lumen is **not** officially supported by this package. And Lumen is no longer under active development.

However, the following are some steps which may help get you started.

Lumen installation instructions can be found in the [Lumen documentation](https://lumen.laravel.com/docs).

Installing
--------------------------------------------------------------------------------------

Install the permissions package via Composer:

```
composer require spatie/laravel-permission
```

Copy the required files:

```
mkdir -p config
cp vendor/spatie/laravel-permission/config/permission.php config/permission.php
cp vendor/spatie/laravel-permission/database/migrations/create_permission_tables.php.stub database/migrations/2018_01_01_000000_create_permission_tables.php
```

You will also need the `config/auth.php` file. If you don't already have it, copy it from the vendor folder:

```
cp vendor/laravel/lumen-framework/config/auth.php config/auth.php
```

Next, if you wish to use this package's middleware, clone whichever ones you want from `Spatie\Permission\Middleware` namespace into your own `App\Http\Middleware` namespace AND replace the `canAny()` call with `hasAnyPermission()` (because Lumen doesn't support `canAny()`).

Then, in `bootstrap/app.php`, uncomment the `auth` middleware, and register the middleware you've created. For example:

```
$app->routeMiddleware([
    'auth'       => App\Http\Middleware\Authenticate::class,
    'permission' => App\Http\Middleware\PermissionMiddleware::class, // cloned from Spatie\Permission\Middleware
    'role'       => App\Http\Middleware\RoleMiddleware::class,  // cloned from Spatie\Permission\Middleware
]);
```

... and also in `bootstrap/app.php`, in the ServiceProviders section, register the package configuration, service provider, and cache alias:

```
$app->configure('permission');
$app->alias('cache', \Illuminate\Cache\CacheManager::class);  // if you don't have this already
$app->register(Spatie\Permission\PermissionServiceProvider::class);
```

... and in the same file, since the Authorization layer uses guards you will need to uncomment the AuthServiceProvider line:

```
$app->register(App\Providers\AuthServiceProvider::class);
```

Ensure the application's database name/credentials are set in your `.env` (or `config/database.php` if you have one), and that the database exists.

NOTE: If you are going to use teams feature, you have to update your [`config/permission.php` config file](https://github.com/spatie/laravel-permission/blob/main/config/permission.php) and set `'teams' => true,`, if you want to use a custom foreign key for teams you must change `team_foreign_key`.

Run the migrations to create the tables for this package:

```
php artisan migrate
```

---

User Model
--------------------------------------------------------------------------------------

NOTE: Remember that Laravel's authorization layer requires that your `User` model implement the `Illuminate\Contracts\Auth\Access\Authorizable` contract. In Lumen you will then also need to use the `Laravel\Lumen\Auth\Authorizable` trait. Note that Lumen does not support the `User::canAny()` authorization method.

---

User Table
--------------------------------------------------------------------------------------

NOTE: If you are working with a fresh install of Lumen, then you probably also need a migration file for your Users table. You can create your own, or you can copy a basic one from Laravel:

[https://github.com/laravel/laravel/blob/master/database/migrations/0001\_01\_01\_000000\_create\_users\_table.php](https://github.com/laravel/laravel/blob/master/database/migrations/0001_01_01_000000_create_users_table.php)

(You will need to run `php artisan migrate` after adding this file.)

Remember to update your `UserFactory.php` to match the fields in the migration you create/copy.
