PHPackages                             litepie/permissions - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. litepie/permissions

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

litepie/permissions
===================

A Laravel permissions package that extends Litepie/Roles functionality

v1.0.0(7mo ago)01MITPHPPHP ^8.1

Since Oct 3Pushed 6mo agoCompare

[ Source](https://github.com/Litepie/Permissions)[ Packagist](https://packagist.org/packages/litepie/permissions)[ RSS](/packages/litepie-permissions/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (7)Versions (2)Used By (0)

Litepie Permissions Package
===========================

[](#litepie-permissions-package)

[![Latest Version on Packagist](https://camo.githubusercontent.com/907b3bc090db1ac709df81a40a522ffc98597d4eb62f4d6ae29280eb45f119fb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6c6974657069652f7065726d697373696f6e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/litepie/permissions)[![Total Downloads](https://camo.githubusercontent.com/4d784b23cf653ae6bf9bd48cbc4e0568da8ffbef64d8015702cb95c0ff922c00/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6c6974657069652f7065726d697373696f6e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/litepie/permissions)[![MIT Licensed](https://camo.githubusercontent.com/55c0218c8f8009f06ad4ddae837ddd05301481fcf0dff8e0ed9dadda8780713e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

This package focuses exclusively on **permissions** functionality while leveraging the role management capabilities of Litepie/Roles.

Features
--------

[](#features)

- 🔐 Permission model with Eloquent relationships
- 🎭 HasPermissions trait for models
- 🛡️ Permission-based middleware
- 🎨 Blade directives for permission checks
- ⚡ Artisan commands for permission management
- 📢 Events and listeners for permission operations
- 🧪 Comprehensive test suite
- 💾 Database caching for performance
- 🔄 Multi-guard support

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require litepie/permissions
```

First, install and configure the Litepie/Roles package as this package extends its functionality:

```
composer require litepie/roles
```

Publish and run the migrations:

```
php artisan vendor:publish --tag="permissions-migrations"
php artisan migrate
```

Publish the config file (optional):

```
php artisan vendor:publish --tag="permissions-config"
```

Quick Start
-----------

[](#quick-start)

### 1. Add the HasPermissions trait

[](#1-add-the-haspermissions-trait)

Add the `HasPermissions` trait to your User model:

```
use Illuminate\Foundation\Auth\User as Authenticatable;
use Litepie\Roles\Traits\HasRoles;
use Litepie\Permissions\Traits\HasPermissions;

class User extends Authenticatable
{
    use HasRoles, HasPermissions;

    // ...
}
```

### 2. Create Permissions

[](#2-create-permissions)

```
use Litepie\Permissions\Models\Permission;

// Create a permission
$permission = Permission::create(['name' => 'edit articles']);

// Or use the artisan command
php artisan permissions:create "edit articles"
```

### 3. Assign Permissions

[](#3-assign-permissions)

```
// Assign permission directly to user
$user->givePermissionTo('edit articles');

// Assign permission to role (requires Litepie/Roles)
$role = Role::create(['name' => 'editor']);
$role->givePermissionTo('edit articles');
$user->assignRole('editor');
```

### 4. Check Permissions

[](#4-check-permissions)

```
// Check if user has permission
$user->hasPermissionTo('edit articles');
$user->can('edit articles'); // Using Laravel's built-in authorization

// Check via role
$user->hasPermissionTo('edit articles'); // Returns true if user has role with this permission
```

Usage
-----

[](#usage)

### Creating Permissions

[](#creating-permissions)

```
use Litepie\Permissions\Models\Permission;

// Create single permission
$permission = Permission::create(['name' => 'edit articles']);

// Create with guard
$permission = Permission::create([
    'name' => 'edit articles',
    'guard_name' => 'admin'
]);
```

### Assigning Permissions

[](#assigning-permissions)

```
// Assign to user
$user->givePermissionTo('edit articles');
$user->givePermissionTo(['edit articles', 'delete articles']);

// Assign to role
$role->givePermissionTo('edit articles');

// Sync permissions (remove all others)
$user->syncPermissions(['edit articles', 'publish articles']);
```

### Checking Permissions

[](#checking-permissions)

```
// Check single permission
$user->hasPermissionTo('edit articles');
$user->can('edit articles');

// Check any permission
$user->hasAnyPermission(['edit articles', 'publish articles']);

// Check all permissions
$user->hasAllPermissions(['edit articles', 'publish articles']);

// Check direct permission (not via role)
$user->hasDirectPermission('edit articles');
```

### Removing Permissions

[](#removing-permissions)

```
// Remove single permission
$user->revokePermissionTo('edit articles');

// Remove multiple permissions
$user->revokePermissionTo(['edit articles', 'delete articles']);

// Remove all permissions
$user->revokePermissionTo($user->permissions);
```

### Middleware

[](#middleware)

Register the permission middleware in your `bootstrap/app.php` (Laravel 11+):

```
->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'permission' => \Litepie\Permissions\Middleware\PermissionMiddleware::class,
    ]);
})
```

Or in `app/Http/Kernel.php` (Laravel 10 and below):

```
protected $middlewareAliases = [
    // ...
    'permission' => \Litepie\Permissions\Middleware\PermissionMiddleware::class,
];
```

Use in routes:

```
Route::group(['middleware' => ['permission:edit articles']], function () {
    // Routes that require 'edit articles' permission
});

Route::get('/articles', function () {
    // This route requires 'edit articles' OR 'publish articles' permission
})->middleware('permission:edit articles|publish articles');
```

### Blade Directives

[](#blade-directives)

```
@permission('edit articles')
    Create Article
@endpermission

@haspermission('edit articles')
    I have permission to edit articles!
@endhaspermission

@hasanypermission(['edit articles', 'publish articles'])
    I have at least one of these permissions!
@endhasanypermission

@hasallpermissions(['edit articles', 'publish articles'])
    I have all of these permissions!
@endhasallpermissions
```

### Artisan Commands

[](#artisan-commands)

```
# Create a permission
php artisan permissions:create "edit articles"

# Create permission with guard
php artisan permissions:create "edit articles" --guard=admin

# List all permissions
php artisan permissions:list

# Show permission details
php artisan permissions:show "edit articles"

# Delete a permission
php artisan permissions:delete "edit articles"
```

### Eloquent Scopes

[](#eloquent-scopes)

```
// Get users with specific permission
$users = User::permission('edit articles')->get();

// Get users without specific permission
$users = User::withoutPermission('edit articles')->get();
```

### Cache

[](#cache)

The package uses Laravel's cache to improve performance. You can clear the permission cache:

```
// Clear permission cache
app()[\Litepie\Permissions\PermissionRegistrar::class]->forgetCachedPermissions();

// Or use artisan command
php artisan permissions:cache-reset
```

Events
------

[](#events)

The package fires several events:

- `Litepie\Permissions\Events\PermissionAttached` - When permission is given to model
- `Litepie\Permissions\Events\PermissionDetached` - When permission is revoked from model

```
use Litepie\Permissions\Events\PermissionAttached;

Event::listen(PermissionAttached::class, function ($event) {
    // $event->model - The model that received the permission
    // $event->permission - The permission that was attached
});
```

Configuration
-------------

[](#configuration)

The config file allows you to customize:

```
return [
    'models' => [
        'permission' => Litepie\Permissions\Models\Permission::class,
    ],

    'table_names' => [
        'permissions' => 'permissions',
        'model_has_permissions' => 'model_has_permissions',
    ],

    'column_names' => [
        'permission_pivot_key' => null, // default 'permission_id'
        'model_morph_key' => 'model_id',
    ],

    'cache' => [
        'expiration_time' => \DateInterval::createFromDateString('24 hours'),
        'key' => 'litepie.permissions.cache',
        'store' => 'default',
    ],

    'display_permission_in_exception' => false,
];
```

Requirements
------------

[](#requirements)

This package extends [Litepie/Roles](https://github.com/Litepie/Roles), so you need to install and configure that package first.

- PHP 8.1+
- Laravel 10.0+
- Litepie/Roles ^1.0

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Litepie Team](https://github.com/litepie)
- Inspired by [Spatie Laravel Permission](https://github.com/spatie/laravel-permission)
- All Contributors

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance69

Regular maintenance activity

Popularity1

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

218d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5cebecc00d31340e5b3175314c3743294016d10ae7d1067b049e702126c739d4?d=identicon)[Renfos](/maintainers/Renfos)

---

Top Contributors

[![georgemjohn](https://avatars.githubusercontent.com/u/7950080?v=4)](https://github.com/georgemjohn "georgemjohn (3 commits)")

---

Tags

laravelsecurityauthorizationaclrolespermissions

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/litepie-permissions/health.svg)

```
[![Health](https://phpackages.com/badges/litepie-permissions/health.svg)](https://phpackages.com/packages/litepie-permissions)
```

###  Alternatives

[spatie/laravel-permission

Permission handling for Laravel 12 and up

12.9k89.8M1.0k](/packages/spatie-laravel-permission)[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k2.9M88](/packages/bezhansalleh-filament-shield)[hasinhayder/tyro

Tyro - The ultimate Authentication, Authorization, and Role &amp; Privilege Management solution for Laravel 12 &amp; 13

6712.1k2](/packages/hasinhayder-tyro)[beatswitch/lock-laravel

A Laravel Driver for Lock.

15529.1k1](/packages/beatswitch-lock-laravel)[wnikk/laravel-access-rules

Simple system of ACR (access control rules) for Laravel, with roles, groups, unlimited inheritance and possibility of multiplayer use.

103.6k1](/packages/wnikk-laravel-access-rules)[erag/laravel-role-permission

A simple and easy-to-install role and permission management package for Laravel, supporting versions 10.x and 11.x

404.2k](/packages/erag-laravel-role-permission)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
