commacodes / laravel-roles-permissions
Simple roles and permissions package for Laravel.
v1.0.1
2025-04-29 20:44 UTC
Requires
- php: ^8.0 || ^8.1 || ^8.2 || ^8.3
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
README
This Laravel package provides a simple role and permission system using JSON-based permissions.
Installation
composer require commacodes/laravel-roles-permissions
Publish config and migration files:
php artisan vendor:publish --provider="Commacodes\RolesPermissions\RolesPermissionsServiceProvider"
php artisan migrate
Configuration
Edit config/global.php
to define your available permissions:
return [ 'permissions' => [ 'dashboard' => 'لوحة التحكم', 'settings' => 'الإعدادات', // ... ], ];
Usage
Role Model
- Permissions are stored as a JSON array in the
permissions
column (nullable).
User Model
Add the following method:
public function hasAbility($permissions) { $role = $this->role; if (!$role) return false; foreach ($role->permissions as $permission) { if (is_array($permissions) && in_array($permission, $permissions)) { return true; } elseif (is_string($permissions) && strcmp($permission, $permissions) === 0) { return true; } } return false; }
AuthServiceProvider
use Illuminate\Support\Facades\Gate; public function boot() { $this->registerPolicies(); foreach (config('global.permissions') as $ability => $label) { Gate::define($ability, function ($auth) use ($ability) { return $auth->hasAbility($ability); }); } }
Blade Usage
@can('dashboard') <li><a href="/dashboard">Dashboard</a></li> @endcan
Route Middleware
Route::middleware(['can:dashboard'])->group(function () { Route::get('/dashboard', [DashboardController::class, 'index']); });
License
MIT © Commacodes