eslamfaroug/laravel-permission-plus
Composer 安装命令:
composer require eslamfaroug/laravel-permission-plus
包简介
An advanced permission management system for Laravel with role-based access control and group management.
README 文档
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
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-08-10
