act-training/laravel-permissions-manager
UUID-ready roles & permissions management UI for Laravel, powered by Spatie Permission + Livewire 3 and FluxUI Pro. Includes CRUD, categories with color badges, protected roles, user assignment safeguards, TableBuilder support, and customizable models/views.
Installation:
composer require act-training/laravel-permissions-manager
php artisan vendor:publish --tag=permissions-manager-config
php artisan vendor:publish --tag=permissions-manager-migrations
php artisan migrate
config/permissions-manager.php exists and adjust settings if needed (e.g., protected_roles).First Use Case:
/permissions-manager (or your configured route).admin, content) and descriptions.Editor, Admin). Mark roles as "protected" to prevent deletion if users are assigned.hasRole()).Quick Start with Code:
use ACTTraining\PermissionsManager\Facades\PermissionsManager;
// Create a permission
PermissionsManager::createPermission('edit_posts', 'content', 'Can edit blog posts');
// Assign to a role
$role = PermissionsManager::findRole('Editor');
$role->givePermissionTo('edit_posts');
// Check user permissions
if (auth()->user()->hasPermissionTo('edit_posts')) { ... }
Permission Management:
auth, reports). Categories appear as color-coded badges in the UI.Role Management:
config/permissions-manager.php:
'protected_roles' => ['Admin', 'SuperAdmin'],
Role model to support hierarchical roles (e.g., Admin inherits from Editor).User Assignment:
UserPermissionsTable component to manage user-role assignments:
use ACTTraining\PermissionsManager\Livewire\UserPermissionsTable;
<livewire:user-permissions-table :users="$users" />
Gate::define('edit-post', function ($user) {
return $user->hasPermissionTo('edit_posts');
});
Customization:
resources/views/vendor/permissions-manager/.Permission, Role, or User models in app/Models/ to add custom logic.PermissionsManager::setCategories([
'content' => ['color' => 'blue', 'label' => 'Content Management'],
'auth' => ['color' => 'green', 'label' => 'Authentication'],
]);
API Integration:
Route::get('/api/permissions', [PermissionsManager::class, 'getPermissions']);
Route::post('/api/roles/{role}/permissions', [PermissionsManager::class, 'assignPermissionsToRole']);
UUID Conflicts:
permissions, roles, and users. Ensure your existing Spatie models are compatible or reset the database if migrating from integer IDs.php artisan permissions:reset-uuids (if provided) or manually update foreign keys.FluxUI Pro Dependency:
resources/views/vendor/flux for customizations.Livewire Caching:
php artisan view:clear
php artisan cache:clear
Protected Role Bypass:
PermissionsManager::forceDeleteRole($roleId);
Permission Caching:
spatie/laravel-permission) may cause stale data. Clear it after changes:
php artisan permission:cache-reset
Log Permissions:
config/permissions-manager.php:
'debug' => env('PERMISSIONS_DEBUG', false),
TableBuilder Issues:
act-training/query-builder is installed and configured:
composer require act-training/query-builder
Livewire Errors:
php artisan livewire:discover to regenerate Livewire components if you encounter class not found errors.Custom Permission Logic:
Permission model to add soft deletes or custom validation:
use ACTTraining\PermissionsManager\Models\Permission as BasePermission;
class Permission extends BasePermission {
protected $guarded = [];
public function validateForCreation(array $data) {
// Custom logic
}
}
Event Listeners:
use ACTTraining\PermissionsManager\Events\PermissionCreated;
PermissionCreated::listen(function ($permission) {
Log::info("New permission created: {$permission->name}");
});
API Resources:
JsonResource:
namespace App\Http\Resources;
use ACTTraining\PermissionsManager\Models\Permission;
class PermissionResource extends JsonResource {
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name,
'category' => $this->category,
'description' => $this->description,
];
}
}
Testing:
use ACTTraining\PermissionsManager\Tests\TestCase;
public function testPermissionCreation() {
$permission = PermissionsManager::createPermission('test_perm', 'test', 'Test desc');
$this->assertDatabaseHas('permissions', ['name' => 'test_perm']);
}
How can I help you explore Laravel packages today?