din9xtr / laravel-enum-permissions
Laravel permission management system using PHP Enums
Package info
github.com/din9xtr/laravel-enum-permissions
pkg:composer/din9xtr/laravel-enum-permissions
v1.0.0
2026-01-21 18:13 UTC
Requires
- php: ^8.3
- illuminate/contracts: ^11.0
- illuminate/database: ^11.0
- illuminate/support: ^11.0
Requires (Dev)
- phpstan/phpstan: ^2.1
README
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