PHPackages                             rez1pro/user-access - 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. rez1pro/user-access

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

rez1pro/user-access
===================

Laravel UserAccess package for roles &amp; permissions using models, enums, and facades.

1.2.2(6mo ago)21981MITPHP

Since Aug 30Pushed 6mo agoCompare

[ Source](https://github.com/rez1Pro/laravel-user-access)[ Packagist](https://packagist.org/packages/rez1pro/user-access)[ RSS](/packages/rez1pro-user-access/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (5)Used By (0)

📦 Laravel UserAccess
====================

[](#-laravel-useraccess)

A Laravel package to manage **Roles &amp; Permissions** using Models, Enums, and Facade support.
Easily integrate role-based access control into your application.

---

🚀 Installation
--------------

[](#-installation)

### 1. Require the package

[](#1-require-the-package)

```
composer require rez1pro/user-access
```

### 2. Service Provider

[](#2-service-provider)

The service provider is auto-discovered.
If needed, register manually in `config/app.php`:

```
'providers' => [
    Rez1pro\UserAccess\UserAccessServiceProvider::class,
]
```

⚡ Installer Command
-------------------

[](#-installer-command)

For a one-shot setup:

```
php artisan user-access:install --force
php artisan migrate
```

This will:

- Publish **config**
- Publish **migrations**
- Publish **models**
- Publish **enums**
- Run database migrations

---

📸 Screenshots
-------------

[](#-screenshots)

### Installation

[](#installation)

[![Installation](screenshots/install.png)](screenshots/install.png)

### Permission Management

[](#permission-management)

[![Permissions](screenshots/all.png)](screenshots/all.png)

### When run rollback

[](#when-run-rollback)

[![Permission Rollback](screenshots/insert_and_rollback_run.png)](screenshots/insert_and_rollback_run.png)

### Permission Management

[](#permission-management-1)

[![Permission](screenshots/after_rolling_back.png)](screenshots/after_rolling_back.png)

---

🗄️ Database Schema
------------------

[](#️-database-schema)

The migration will create the following tables:

- `roles`
- `permissions`
- `role_has_permissions` (pivot)

---

👤 User Model Integration
------------------------

[](#-user-model-integration)

Add the `HasPermission` trait to your User model:

```
use Rez1pro\UserAccess\Traits\HasPermission;

class User extends Authenticatable
{
    use HasPermission;

    // ...existing code...
}
```

### User Permission Methods

[](#user-permission-methods)

```
$user = User::find(1);

// Assign role to user
$user->assignRole('admin');
$user->assignRole(['admin', 'editor']);

// Check if user has role
$user->hasRole('admin'); // true/false
$user->hasAnyRole(['admin', 'editor']); // true/false

// Check if user has permission
$user->hasPermissionTo('create:user'); // true/false
$user->hasPermissionTo(ExamplePermissionEnum::CREATE_USER); // true/false

// Get user roles and permissions
$user->roles; // Collection of roles
$user->permissions; // Collection of permissions through roles

// Remove role from user
$user->removeRole('admin');
```

---

🧩 Models
--------

[](#-models)

The package ships with:

- `App\Models\Role`
- `App\Models\Permission`

### Role Model Usage

[](#role-model-usage)

```
use App\Models\Role;

// Create role
$role = Role::create(['name' => 'Admin']);

// Assign permissions to role
$role->givePermissionTo(ExamplePermissionEnum::CREATE_USER);
$role->givePermissionTo(['create:user', 'edit:user']);

// Check role permissions
$role->hasPermissionTo(ExamplePermissionEnum::CREATE_USER); // true/false

// Get role permissions
$role->permissions; // Collection of permissions

// Remove permission from role
$role->removePermission(ExamplePermissionEnum::CREATE_USER);
```

### Permission Model Usage

[](#permission-model-usage)

```
use App\Models\Permission;

$permission = Permission::where('name', 'create:user')->first();

// Get all roles that have this permission
$permission->roles; // Collection of roles
```

---

🏷️ Enums
--------

[](#️-enums)

Enums are placed in `App\Enums\Permissions`.

Example:

```
use Rez1pro\UserAccess\Traits\HasAccess;

enum ExamplePermissionEnum: string
{
    use HasAccess;

    case VIEW_EXAMPLE = 'view:example';
    case CREATE_EXAMPLE = 'create:example';
    case EDIT_EXAMPLE = 'edit:example';
    case DELETE_EXAMPLE = 'delete:example';
}
```

Usage:

```
ExamplePermissionEnum::VIEW_EXAMPLE->value; // "view:example"
```

### Permission Commands

[](#permission-commands)

```
# Create new permission enums
php artisan permission:create

# Insert all permissions to database
php artisan permission:insert

# Remove permissions from database
php artisan permission:rollback

# Delete all existing permissions and re-insert them (fresh start)
php artisan permission:fresh
```

After running rollback command:

```
namespace App\Enums\Permissions;

use Rez1pro\UserAccess\Traits\HasAccess;

enum ExamplePermissionEnum: string
{
    use HasAccess;

    // case VIEW_EXAMPLE = 'view:example'; // commented by UserAccess package
    case CREATE_EXAMPLE = 'create:example';
}
```

The `permission:fresh` command is useful when you want to:

- Reset all permissions to match your current enum definitions
- Clean up old/unused permissions from the database
- Sync permissions after major enum changes
- **Note:** This will temporarily disable foreign key checks to allow deletion, then re-insert all permissions from your enums

---

🎭 Facade
--------

[](#-facade)

The `UserAccess` Facade provides quick helpers:

```
use Rez1pro\UserAccess\Facades\UserAccess;

// Get all permissions as array
$permissions = UserAccess::all();
// Returns: ['view:example', 'create:example']

// Get permissions grouped by enum
$permissionWithGroups = UserAccess::withGroup();
```

Returns JSON structure:

```
[
    {
        "name": "Example Permission Enum",
        "permissions": [
            {
                "id": "view:example",
                "name": "VIEW EXAMPLE"
            },
            {
                "id": "create:example",
                "name": "CREATE EXAMPLE"
            }
        ]
    }
]
```

---

🔐 Practical Usage Examples
--------------------------

[](#-practical-usage-examples)

### Complete User Role &amp; Permission Setup

[](#complete-user-role--permission-setup)

```
use App\Models\User;
use App\Models\Role;
use App\Enums\Permissions\ExamplePermissionEnum;

// Create a role
$adminRole = Role::create(['name' => 'admin']);

// Assign permissions to role
$adminRole->givePermissionTo([
    ExamplePermissionEnum::VIEW_EXAMPLE,
    ExamplePermissionEnum::CREATE_EXAMPLE,
    ExamplePermissionEnum::EDIT_EXAMPLE
]);

// Assign role to user
$user = User::find(1);
$user->assignRole('admin');

// Check user permissions
if ($user->hasPermissionTo(ExamplePermissionEnum::CREATE_EXAMPLE)) {
    // User can create examples
}

// In your controllers/middleware
if (auth()->user()->hasPermissionTo('edit:example')) {
    // Allow edit action
}
```

### Middleware Usage

[](#middleware-usage)

```
// In your routes
Route::middleware(['auth', 'permission:create:user'])->group(function () {
    Route::post('/users', [UserController::class, 'store']);
});

// Or check in controller
public function store(Request $request)
{
    if (!auth()->user()->hasPermissionTo('create:user')) {
        abort(403, 'Unauthorized');
    }

    // Create user logic
}
```

---

📌 Summary
---------

[](#-summary)

- `php artisan user-access:install` → Quick setup
- `UserAccess` Facade → Easy access to roles &amp; permissions
- `HasPermission` Trait → Add to User model for permission checking
- `Enums` → Strongly typed permissions
- `Models` → Extendable Role and Permission models
- `Migrations` → Published and customizable

---

📝 License
---------

[](#-license)

This package is open-sourced software licensed under the [MIT license](LICENSE).

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance69

Regular maintenance activity

Popularity14

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 94.1% 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

Every ~26 days

Total

4

Last Release

183d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ed77ba0f982a2af4ee776f0c93cddcd0de1eee2e3ba2917e094a73c02be8870b?d=identicon)[rez1Pro](/maintainers/rez1Pro)

---

Top Contributors

[![rez1Pro](https://avatars.githubusercontent.com/u/64180529?v=4)](https://github.com/rez1Pro "rez1Pro (16 commits)")[![MdIshtiaque](https://avatars.githubusercontent.com/u/88388417?v=4)](https://github.com/MdIshtiaque "MdIshtiaque (1 commits)")

### Embed Badge

![Health badge](/badges/rez1pro-user-access/health.svg)

```
[![Health](https://phpackages.com/badges/rez1pro-user-access/health.svg)](https://phpackages.com/packages/rez1pro-user-access)
```

###  Alternatives

[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k2.9M88](/packages/bezhansalleh-filament-shield)[gesdinet/jwt-refresh-token-bundle

Implements a refresh token system over Json Web Tokens in Symfony

70516.4M35](/packages/gesdinet-jwt-refresh-token-bundle)[illuminate/auth

The Illuminate Auth package.

9327.3M1.0k](/packages/illuminate-auth)[beatswitch/lock

A flexible, driver based Acl package for PHP 5.4+

870304.7k2](/packages/beatswitch-lock)[amocrm/amocrm-api-library

amoCRM API Client

182728.5k6](/packages/amocrm-amocrm-api-library)[vonage/jwt

A standalone package for creating JWTs for Vonage APIs

424.1M4](/packages/vonage-jwt)

PHPackages © 2026

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