PHPackages                             maxiviper117/laravel-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. maxiviper117/laravel-access

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

maxiviper117/laravel-access
===========================

Simple explicit scoped permissions for Laravel applications.

v0.1.2(2w ago)00MITPHPPHP ^8.4CI passing

Since May 20Pushed 2w agoCompare

[ Source](https://github.com/Maxiviper117/laravel-access)[ Packagist](https://packagist.org/packages/maxiviper117/laravel-access)[ Docs](https://github.com/maxiviper117/laravel-access)[ GitHub Sponsors](https://github.com/maxiviper117)[ RSS](/packages/maxiviper117-laravel-access/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (13)Versions (12)Used By (0)

Laravel Access
==============

[](#laravel-access)

Explicit scoped authorization for Laravel — permission enums, polymorphic scopes, and zero implicit state.

> **[Documentation →](https://maxiviper117.github.io/laravel-access/)** — tutorials, how-to guides, reference, and explanation.

Laravel Access gives you **explicit, scoped role-permission authorization** for multi-tenant Laravel applications. Unlike packages that assume one user = one set of permissions, Laravel Access is built for apps where users have **different roles in different scopes** — companies, teams, workspaces, or any Eloquent model.

Permissions are **PHP BackedEnums** (not strings): compile-time safety, IDE autocomplete, single source of truth. The API makes scope **explicit at every call site** — `$user->in($company)->can(Permission::UsersInvite)` — no global state, no `team_id` hacks.

```
$user->in($company)->can(Permission::UsersInvite);
```

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

[](#installation)

```
composer require maxiviper117/laravel-access
php artisan access:install --enum
php artisan migrate
php artisan access:sync
```

Add the trait to your user model:

```
use Maxiviper117\Access\Concerns\HasAccess;

class User extends Authenticatable
{
    use HasAccess;
}
```

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

[](#configuration)

Define your permission enum in `app/Enums/Permission.php`, then configure roles and global roles in `config/access.php`.

```
return [
    'permission_enums' => [
        App\Enums\Permission::class,
    ],

    'roles' => [
        'Owner' => [
            App\Enums\Permission::UsersView,
            App\Enums\Permission::UsersInvite,
        ],
    ],

    'global_roles' => [
        'Platform Admin' => [
            App\Enums\Permission::SystemManage,
        ],
    ],

    'gate_before' => [
        'enabled' => false,
        'global_role' => 'Platform Admin',
    ],
];
```

Sync enums and configured roles into the database:

```
php artisan access:sync
```

Or define roles in code with `Access::role()`:

```
use Maxiviper117\Access\Facades\Access;

Access::role('Owner')->allows([Permission::UsersView, Permission::UsersInvite]);
Access::role('Platform Admin', global: true)->allows([Permission::SystemManage]);
```

Scoped Usage
------------

[](#scoped-usage)

Assign and check roles inside a scope:

```
$user->in($company)->assignRole('Owner');
$user->in($company)->hasRole('Owner');
$user->in($company)->removeRole('Owner');
```

Check permissions resolved through role inheritance and direct grants:

```
$user->in($company)->can(Permission::UsersInvite);
$user->in($company)->cannot(Permission::RolesManage);
```

Grant or revoke permissions directly (bypassing roles):

```
$user->in($company)->givePermission(Permission::UsersInvite);
$user->in($company)->revokePermission(Permission::UsersInvite);
```

Check any role in a set:

```
$user->in($company)->hasAnyRole(['Owner', 'Admin']);
```

Use inside policies:

```
public function inviteUsers(User $user, Company $company): bool
{
    return $user->in($company)->can(Permission::UsersInvite);
}
```

Global Usage
------------

[](#global-usage)

Global roles and permissions live outside any scope:

```
$user->assignGlobalRole('Platform Admin');
$user->hasGlobalRole('Platform Admin');
$user->removeGlobalRole('Platform Admin');
$user->canGlobally(Permission::SystemManage);
$user->giveGlobalPermission(Permission::SystemManage);
```

Dynamic Roles
-------------

[](#dynamic-roles)

Create and manage runtime roles per scope:

```
$user->in($company)->createRole('custom-manager', 'Custom Manager', 'Description');
$user->in($company)->syncRolePermissions('custom-manager', [Permission::UsersView]);
$user->in($company)->assignRole('custom-manager');
$user->in($company)->deleteRole('custom-manager');
```

Permission Maps
---------------

[](#permission-maps)

Build an Inertia-friendly permission map:

```
Access::for($user)->in($company)->toArray([
    Permission::UsersInvite,
    Permission::RolesManage,
]);
// ['users.invite' => true, 'roles.manage' => false]
```

Scoped Gates
------------

[](#scoped-gates)

Register Laravel Gates for all enum cases at once:

```
Access::defineScopedGates(Permission::class, Company::class);
// Gate::authorize('users.invite', $company);
```

Middleware
----------

[](#middleware)

Guard routes with the `access` middleware:

```
Route::middleware('access:users.invite,company')
    ->get('/companies/{company}/invite', ...);
```

Commands
--------

[](#commands)

```
php artisan access:install --enum          # Publish config, migration, Permission enum
php artisan access:sync --dry-run          # Preview changes
php artisan access:sync --prune            # Delete stale permissions and roles
php artisan access:scope --name=company    # Scaffold team/workspace membership
php artisan access:debug user@example.com --scope=company:1
php artisan access:clear                   # Invalidate permission cache
```

Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

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

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance97

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 68% 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 ~2 days

Total

3

Last Release

15d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/11472492?v=4)[David](/maintainers/Maxiviper117)[@Maxiviper117](https://github.com/Maxiviper117)

---

Top Contributors

[![Maxiviper117](https://avatars.githubusercontent.com/u/11472492?v=4)](https://github.com/Maxiviper117 "Maxiviper117 (17 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (5 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (3 commits)")

---

Tags

laravelmaxiviper117laravel-access

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/maxiviper117-laravel-access/health.svg)

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

###  Alternatives

[spatie/laravel-permission

Permission handling for Laravel 12 and up

12.9k98.0M1.3k](/packages/spatie-laravel-permission)[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.3M41](/packages/spatie-laravel-pdf)[spatie/laravel-passkeys

Use passkeys in your Laravel app

463755.5k32](/packages/spatie-laravel-passkeys)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3913.7k](/packages/rawilk-profile-filament-plugin)[jeffgreco13/filament-breezy

A custom package for Filament with login flow, profile and teams support.

1.0k1.9M52](/packages/jeffgreco13-filament-breezy)[spatie/laravel-health

Monitor the health of a Laravel application

88011.3M149](/packages/spatie-laravel-health)

PHPackages © 2026

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