PHPackages                             hasanhawary/permission-manager - 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. hasanhawary/permission-manager

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

hasanhawary/permission-manager
==============================

A simple permission and role management service extracted from the app for reuse.

v1.3.0(3mo ago)0196MITPHPPHP &gt;8.0

Since Sep 21Pushed 3mo agoCompare

[ Source](https://github.com/hasanhawary/permission-manager)[ Packagist](https://packagist.org/packages/hasanhawary/permission-manager)[ Docs](https://github.com/hasanhawary/permission-manager)[ RSS](/packages/hasanhawary-permission-manager/feed)WikiDiscussions main Synced 1mo ago

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

Permission Manager
==================

[](#permission-manager)

[![Latest Stable Version](https://camo.githubusercontent.com/7e01ae019a966cf1da2159ad5a0b455b906bd91cad57957dabba6d1df8c9416f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f686173616e6861776172792f7065726d697373696f6e2d6d616e616765722e737667)](https://packagist.org/packages/hasanhawary/permission-manager)[![Total Downloads](https://camo.githubusercontent.com/ba046d6cbca7534788e3f93b29d37abc8157e72d02a42d562ffc3b43df5849fa/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f646d2f686173616e6861776172792f7065726d697373696f6e2d6d616e616765722e737667)](https://packagist.org/packages/hasanhawary/permission-manager)[![PHP Version](https://camo.githubusercontent.com/baf8d2aae03c05b30efa66d6d9d5d0e6ea16c53bd03e2fb8a25c3b446d97a72d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f686173616e6861776172792f7065726d697373696f6e2d6d616e616765722e737667)](https://packagist.org/packages/hasanhawary/permission-manager)[![License](https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667)](LICENSE)

A simple but powerful **role &amp; permission manager** for Laravel, built on top of [spatie/laravel-permission](https://github.com/spatie/laravel-permission).

---

✨ Features
----------

[](#-features)

- **One-line setup:** `Access::handle()` builds roles &amp; permissions automatically.
- Ships with **default roles** (`root`, `admin`).
- Auto-discovers your **models** from `app/Models` and **nested directories** automatically.
- **Config-driven roles**: inheritance (`like`), add/remove (`added`, `exception`), and custom permission sets.
- **Additional operations** for global actions not tied to models.
- **Translation-ready**: multilingual `display_name` for roles &amp; permissions (e.g., English &amp; Arabic).
- **Multiple guard support**: configure default guard and per-model guard overrides.
- **Custom model paths**: define your own Role and Permission model classes.
- Works with **Laravel Modules** as well as `app/Models`.

---

📦 Installation
--------------

[](#-installation)

```
composer require hasanhawary/permission-manager
```

The service provider is auto-discovered.

Optionally publish the config:

```
php artisan vendor:publish --tag=permission-manager-config
```

This creates `config/roles.php`.

---

⚡ Quick Start: Build Everything
-------------------------------

[](#-quick-start-build-everything)

Use the **facade** for the simplest bootstrap:

```
use HasanHawary\PermissionManager\Facades\Access;

// Full rebuild (truncates & regenerates roles/permissions)
Access::handle();

// Just regenerate without resetting
Access::handle(skipReset: true);
```

Or run the artisan command:

```
php artisan permissions:reset
```

Both do the same thing under the hood.

---

🗂 Model-level Permissions
-------------------------

[](#-model-level-permissions)

Define permissions **directly in your models**:

```
class Report
{
    public bool $inPermission = true;

    // Override CRUD (defaults: create/read/update/delete)
    public array $basicOperations = ['read', 'update'];

    // Add custom operations
    public array $specialOperations = ['export'];

    // Optional: Set specific guard for this model's permissions
    // This overrides the default_guard from config
    protected string $guard_name = 'api';
}
```

Generated permissions:

```
read-report
update-report
export-report

```

The package automatically discovers models in `app/Models` and all **nested subdirectories**.

---

⚙️ Config Example (`config/roles.php`)
--------------------------------------

[](#️-config-example-configrolesphp)

```
// Custom model paths (optional)
'class_paths' => [
    'role' => \App\Models\Role::class,
    'permission' => \App\Models\Permission::class,
],

// Default guard for permissions (default: 'sanctum')
'default_guard' => 'sanctum',

'roles' => [
    'manager' => [
        'like' => 'admin',      // inherit from admin
        'type' => 'exception',  // remove selected permissions
        'permissions' => [
            'project' => ['delete'], // manager cannot delete projects
        ],
    ],
    'auditor' => [
        'permissions' => [
            'report' => ['read', 'export'],
        ],
    ],
],

'additional_operations' => [
    [
        'name' => 'ReportBuilder',
        'operations' => ['main'], // generates "main-reportbuilder"
        'basic' => true           // also add CRUD ops
    ]
],

'default' => [
    'permissions' => ['dashboard-access'],
],
```

### Configuration Options

[](#configuration-options)

#### `class_paths`

[](#class_paths)

Override the default Role and Permission model classes. This is useful if you have custom implementations or use different namespaces:

```
'class_paths' => [
    'role' => \App\Models\Role::class,
    'permission' => \App\Models\Permission::class,
],
```

#### `default_guard`

[](#default_guard)

Set the default authentication guard for permissions. This guard will be used when checking user permissions and roles:

```
'default_guard' => 'sanctum', // or 'web', 'api', etc.
```

#### Per-Model Guard Override

[](#per-model-guard-override)

You can override the default guard for specific models using the `$guard_name` property in your model:

```
class ApiResource
{
    public bool $inPermission = true;
    protected string $guard_name = 'api'; // Use 'api' guard instead of default
}
```

---

🌍 Translations
--------------

[](#-translations)

This makes it easy to show localized names in dashboards, logs, or admin panels.

Example language file `lang/ar/roles.php`:

```
