eslamfaroug / laravel-permission-plus
An advanced permission management system for Laravel with role-based access control and group management.
Requires
- php: ^8.1
- illuminate/database: ^10.0
- illuminate/support: ^10.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2025-09-10 21:32:22 UTC
README
Author: Eslam Faroug
๐ Table of Contents
- ๐ Introduction
- โจ Key Features
- ๐ Documentation
- โ๏ธ Installation
- ๐ง Core Components
- ๐ฏ Quick Start Guide
- ๐ Basic Usage Examples
- ๐ CRUD Operations
- ๐ Advanced Features
- ๐ Customization & Integration
- ๐ Contributing
- ๐ License
๐ Introduction
Laravel Permission Plus is an advanced, flexible, and multilingual package for managing permissions, roles, and groups in Laravel applications. It provides a comprehensive RBAC (Role-Based Access Control) system with support for:
- Multilingual content (JSON columns for Arabic, English, French, etc.)
- Polymorphic relationships (assign to any Eloquent model)
- Group-based access control (organize users into teams)
- High performance (optimized queries and relationships)
- Multi-guard support (web, API, admin, etc.)
Perfect for applications requiring sophisticated access control with internationalization support.
โจ Key Features
Feature | Description |
---|---|
๐ Advanced RBAC | Complete permission, role, and group management |
๐ Multilingual | JSON columns for name/description in multiple languages |
๐ Polymorphic | Assign permissions to any model (User, Employee, Client) |
โก High Performance | Optimized queries and efficient relationships |
๐ฏ Simple API | Easy-to-use Traits, Facades, and Helper functions |
๐ก๏ธ Multi-guard | Support for different authentication contexts |
๐ง Extensible | Fully customizable tables, models, and relationships |
๐ฑ Modern | Built for Laravel 8+ with modern PHP practices |
๐ Documentation
This package includes comprehensive documentation organized by complexity level:
Document | Purpose | Best For |
---|---|---|
๐ Usage Examples | Basic operations and common patterns | Beginners - Getting started |
๐ Comprehensive Examples | Advanced features and complex scenarios | Advanced users - Mastering the package |
๐ README.md | Overview and CRUD operations | Reference - Quick lookups |
โ๏ธ Installation
1. Install Package
composer require eslamfaroug/laravel-permission-plus
2. Publish Configuration
php artisan vendor:publish --provider="EslamFaroug\PermissionPlus\Providers\PermissionServiceProvider" --tag="permission-plus-config" php artisan vendor:publish --provider="EslamFaroug\PermissionPlus\Providers\PermissionServiceProvider" --tag="permission-plus-migrations"
3. Run Migrations
php artisan migrate
4. Verify Installation
composer test # or ./vendor/bin/phpunit
๐ง Core Components
Models
Permission
- Individual access rightsRole
- Collections of permissionsGroup
- Collections of roles and usersPermissionGuard
- Permission containers by context
Traits
HasAccessControl
- Assign/check roles, permissions, groupsHasTranslatable
- Automatic multilingual field handling
Services
AccessControlManager
- Central service for all operations
API Access
- Helper Function:
AccessControl()->roles()->list()
- Facade:
AccessControl::roles()->list()
๐ฏ Quick Start Guide
Step 1: Add Trait to User Model
<?php namespace App\Models; use EslamFaroug\PermissionPlus\Traits\HasAccessControl; class User extends Authenticatable { use HasAccessControl; // ... rest of your model }
Step 2: Basic Usage
// Assign roles and permissions $user->assignRole('editor'); $user->givePermissionTo('edit-posts'); // Check access if ($user->hasRole('admin')) { // Admin actions } if ($user->hasPermissionTo('delete-posts')) { // Delete post action }
Step 3: Explore Documentation
- ๐ Usage Examples - Start here for basic patterns
- ๐ Comprehensive Examples - Advanced features
๐ Basic Usage Examples
๐ก For detailed examples and common patterns, see Usage Examples
User Access Control
// Assign roles and permissions $user->assignRole('editor'); $user->givePermissionTo('edit-articles'); $user->assignToGroups('content-team'); // Check permissions $user->hasRole('admin'); // true/false $user->hasPermissionTo('delete-posts'); // true/false $user->inGroup('content-team'); // true/false // Get all permissions $permissions = $user->getAllPermissions(); $roles = $user->getAllRoles(); $groups = $user->getAllGroups();
Role and Permission Management
// Create roles with permissions $role = AccessControl()->roles()->create([ 'name' => ['en' => 'Editor', 'ar' => 'ู ุญุฑุฑ'], 'key' => 'editor', 'permissions' => ['create-post', 'edit-post', 'delete-post'] ]); // Create permissions $permission = AccessControl()->guards()->create([ 'name' => ['en' => 'Web Guard', 'ar' => 'ุญุงุฑุณ ุงูููุจ'], 'key' => 'web', 'permissions' => [ ['name' => ['en' => 'View Posts', 'ar' => 'ุนุฑุถ ุงูู ูุงูุงุช'], 'key' => 'view-posts'] ] ]);
๐ CRUD Operations
The package provides a unified API for all CRUD operations through the AccessControl
helper.
๐ List Operations
// List with filters and relations $roles = AccessControl()->roles()->list( ['key' => 'admin'], // filters ['permissions', 'groups'], // relations true // get data (false returns query builder) ); // Get query builder for custom operations $query = AccessControl()->roles()->list([], [], false); $paginatedRoles = $query->paginate(15);
โ Create Operations
// Create role with permissions $role = AccessControl()->roles()->create([ 'name' => ['en' => 'Content Manager', 'ar' => 'ู ุฏูุฑ ุงูู ุญุชูู'], 'key' => 'content-manager', 'permissions' => ['create-post', 'edit-post', 'delete-post'] ]); // Create group with roles $group = AccessControl()->groups()->create([ 'name' => ['en' => 'Content Team', 'ar' => 'ูุฑูู ุงูู ุญุชูู'], 'key' => 'content-team', 'roles' => ['editor', 'reviewer', 'publisher'] ]);
โ๏ธ Update Operations
// Update with new data $role = AccessControl()->roles()->update(1, [ 'name' => ['en' => 'Senior Editor', 'ar' => 'ู ุญุฑุฑ ุฃูู'], 'permissions' => ['manage-content', 'approve-posts'] ]); // Direct model update $role = AccessControl()->roles()->show(1); $role->name = ['en' => 'Updated Name', 'ar' => 'ุงุณู ู ุญุฏุซ']; $role->save();
๐๏ธ Delete Operations
// Delete by ID $deleted = AccessControl()->roles()->delete(1); // Delete model $role = AccessControl()->roles()->show(1); $deleted = $role->delete();
๐ Advanced Features
๐ก For comprehensive examples and advanced patterns, see Comprehensive Examples
Multilingual Support
// Set application locale app()->setLocale('ar'); // Create multilingual entity $role = AccessControl()->roles()->create([ 'name' => [ 'en' => 'Content Editor', 'ar' => 'ู ุญุฑุฑ ุงูู ุญุชูู', 'fr' => 'รditeur de contenu' ], 'key' => 'content-editor' ]); // Access localized name echo $role->name; // Returns: ู ุญุฑุฑ ุงูู ุญุชูู (when locale is 'ar') // Get all translations $translations = $role->getTranslations('name');
Complex Queries
// Get roles with specific permissions $query = AccessControl()->roles()->list([], ['permissions'], false); $rolesWithEditPermission = $query->whereHas('permissions', function($q) { $q->where('key', 'edit-post'); })->get(); // Get groups with admin roles $query = AccessControl()->groups()->list([], ['roles'], false); $groupsWithAdminRole = $query->whereHas('roles', function($q) { $q->where('key', 'admin'); })->get();
Bulk Operations
// Bulk create roles $roleData = [ ['name' => ['en' => 'User', 'ar' => 'ู ุณุชุฎุฏู '], 'key' => 'user'], ['name' => ['en' => 'Moderator', 'ar' => 'ู ุดุฑู'], 'key' => 'moderator'], ['name' => ['en' => 'Administrator', 'ar' => 'ู ุฏูุฑ'], 'key' => 'administrator'] ]; foreach ($roleData as $data) { AccessControl()->roles()->create($data); } // Bulk assign permissions $role = AccessControl()->roles()->show('admin'); $permissions = ['manage-users', 'manage-roles', 'system-settings']; $role->permissions()->sync($permissions);
๐ Customization & Integration
Configuration
// config/permission-plus.php return [ 'models' => [ 'permission' => App\Models\CustomPermission::class, 'role' => App\Models\CustomRole::class, 'group' => App\Models\CustomGroup::class, 'guard' => App\Models\CustomGuard::class, ], 'languages' => ['en', 'ar', 'fr', 'de'], // supported languages ];
Middleware Integration
// routes/web.php Route::middleware(['auth'])->group(function () { // Permission-based routes Route::middleware(['permission:edit-post'])->group(function () { Route::get('/posts/{post}/edit', [PostController::class, 'edit']); Route::put('/posts/{post}', [PostController::class, 'update']); }); // Role-based routes Route::middleware(['role:admin'])->group(function () { Route::resource('users', UserController::class); }); });
Blade Templates
{{-- Check permissions in views --}} @if(auth()->user()->hasPermissionTo('edit-posts')) <a href="{{ route('posts.edit', $post) }}">Edit Post</a> @endif @if(auth()->user()->hasRole('admin')) <div class="admin-panel"> Admin controls here </div> @endif
๐ Contributing
Before Contributing
-
Check existing documentation:
- Usage Examples - Common patterns and solutions
- Comprehensive Examples - Advanced usage and edge cases
-
Review the codebase to understand the architecture
-
Test your changes thoroughly
Reporting Issues
- Provide detailed error messages
- Include code examples
- Check if the issue is covered in the documentation
๐ License
MIT License ยฉ Eslam Faroug
๐ Need Help?
- ๐ Usage Examples - Start here for basic usage
- ๐ Comprehensive Examples - Advanced features and patterns
- ๐ Report Issues - Bug reports and feature requests
- ๐ง Contact Author - Direct support