din9xtr/laravel-enum-permissions

Laravel permission management system using PHP Enums

Maintainers

Package info

github.com/din9xtr/laravel-enum-permissions

pkg:composer/din9xtr/laravel-enum-permissions

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.0.0 2026-01-21 18:13 UTC

This package is auto-updated.

Last update: 2026-02-26 10:39:06 UTC


README

PHP Version License: MIT

Type-safe permission management system for Laravel

Installation

composer require din9xtr/laravel-enum-permissions

Quick Start

Create Migration

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->json('permissions')->nullable();
        });
    }

    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('permissions');
        });
    }
};

Create Permission Enum

<?php

namespace Din9xtr\LaravelEnumPermissions\Example\Enums;

use Din9xtr\LaravelEnumPermissions\Contracts\PackagePermissionInterface;
use Din9xtr\LaravelEnumPermissions\Contracts\PermissionInterface;

enum PermissionEnum: string implements PermissionInterface
{
    case CREATE = 'create';
    case READ = 'read';
    case UPDATE = 'update';
    case DELETE = 'delete';
    case EXPORT = 'export';
    case IMPORT = 'import';

    public static function all(): array
    {
        return array_column(self::cases(), 'value');
    }

    public static function getPackagePermissions(PackagePermissionInterface $package): array
    {
        return match ($package) {
            PackageEnum::ADMIN => [
                self::CREATE,
                self::READ,
                self::UPDATE,
                self::DELETE,
                self::EXPORT,
                self::IMPORT,
            ],
            PackageEnum::EDITOR => [
                self::CREATE,
                self::READ,
                self::UPDATE,
                self::EXPORT,
            ],
            PackageEnum::VIEWER => [
                self::READ,
                self::EXPORT,
            ],
            PackageEnum::CUSTOM => [],
        };
    }
}

Create Package Enum (optional)

<?php

namespace Din9xtr\LaravelEnumPermissions\Example\Enums;

use Din9xtr\LaravelEnumPermissions\Contracts\PackagePermissionInterface;

enum PackageEnum: string implements PackagePermissionInterface
{
    case ADMIN = 'admin';
    case EDITOR = 'editor';
    case VIEWER = 'viewer';
    case CUSTOM = 'custom';
}

Configure model

<?php

declare(strict_types=1);

namespace Din9xtr\LaravelEnumPermissions\Example;

use Din9xtr\LaravelEnumPermissions\Casts\PermissionsCast;
use Din9xtr\LaravelEnumPermissions\Contracts\HasPackagePermissionEnum;
use Din9xtr\LaravelEnumPermissions\Contracts\HasPermissionEnum;
use Din9xtr\LaravelEnumPermissions\Example\Enums\PackageEnum;
use Din9xtr\LaravelEnumPermissions\Example\Enums\PermissionEnum;
use Din9xtr\LaravelEnumPermissions\Traits\HasPermissionsTrait;
use Illuminate\Database\Eloquent\Model;

class User extends Model implements HasPermissionEnum, HasPackagePermissionEnum
{
    use HasPermissionsTrait;

    protected string $permissionsAttribute = 'permissions';

    protected $casts = [
        'permissions' => PermissionsCast::class,
    ];

    public static function permissionEnum(): string
    {
        return PermissionEnum::class;
    }

    public static function packageEnum(): string
    {
        return PackageEnum::class;
    }
}

Usage Examples

$user = User::find(1);
// Check if user has specific permission
if ($user->hasPermission(PermissionEnum::CREATE)) {
    // User can create
}
// Apply a package
$user->applyPackage(PackageEnum::ADMIN)->save();
// Detect which package user currently has
$package = $user->detectPackage(); // Returns PackageEnum enum

Requirements

PHP 8.3 or higher

Laravel 11.x

Database with JSON column support

License

This project is open-source and available under the MIT License.

Copyright © 2026 Din9xtr