codeflextech/permission-manager
Plug-and-play Roles & Permissions management UI for Laravel 11 using spatie/laravel-permission + Livewire 3. Permission/role CRUD, grouped permission matrix, assign roles to users, dashboard stats, super admin protection, standalone CSS, configurable routes/middleware/guard.
A plug-and-play Roles & Permissions management UI for any Laravel project using spatie/laravel-permission + Livewire 3.
Built by CodeFlexTech.
module.action)module.action naming| Dependency | Version |
|---|---|
| PHP | ^8.2 |
| Laravel | ^11.0 |
| spatie/laravel-permission | ^6.0 |
| livewire/livewire | ^3.0 |
composer require codeflextech/permission-manager
# Publish config
php artisan vendor:publish --tag=permission-manager-config
# Publish CSS (required — serves the UI styles)
php artisan vendor:publish --tag=permission-manager-assets
# Optional: publish views to customize
php artisan vendor:publish --tag=permission-manager-views
php artisan migrate
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
}
http://your-app.test/permission-manager
After publishing, edit config/permission-manager.php:
return [
// URL prefix — default: /permission-manager
'route_prefix' => 'permission-manager',
// Middleware on all routes
'middleware' => ['web', 'auth'],
// Spatie guard
'guard' => 'web',
// Role name that bypasses permission checks
'super_admin_role' => 'super_admin',
// Your User model
'user_model' => \App\Models\User::class,
// Set to your app layout component to embed inside your app UI
// e.g. 'layouts.app' — leave null to use package's standalone layout
'layout' => null,
// Rows per page
'per_page' => 15,
// Disable permission creation via UI (seed-only mode)
'allow_create_permissions' => true,
];
By default only auth middleware is applied. To restrict to admins only, update config:
'middleware' => ['web', 'auth', 'role:super_admin'],
Or use a gate:
'middleware' => ['web', 'auth', 'can:manage-permissions'],
This package works best with dot-notation:
module.action
Examples:
clients.view
clients.create
clients.edit
clients.delete
invoices.create
invoices.export
reports.sales
reports.due_payments
organizations.edit
The UI auto-groups by the prefix before the first ..
// Check permission
$user->can('clients.create');
@can('clients.create') ... @endcan
// Check role
$user->hasRole('admin');
@role('admin') ... @endrole
// Assign role
$user->assignRole('admin');
// Sync roles
$user->syncRoles(['admin', 'editor']);
// Sync permissions to role
$role->syncPermissions(['clients.view', 'clients.create']);
Recommended: seed permissions in a seeder, use the UI only for role assignment.
class PermissionSeeder extends Seeder
{
public function run(): void
{
$permissions = [
// Clients
'clients.view', 'clients.create', 'clients.edit', 'clients.delete',
// Invoices
'invoices.view', 'invoices.create', 'invoices.edit', 'invoices.delete',
// Reports
'reports.sales', 'reports.payments', 'reports.due',
// Settings
'roles.manage', 'permissions.manage', 'organizations.edit',
];
foreach ($permissions as $permission) {
Permission::firstOrCreate(['name' => $permission, 'guard_name' => 'web']);
}
// Create super admin role with all permissions
$superAdmin = Role::firstOrCreate(['name' => 'super_admin']);
$superAdmin->syncPermissions(Permission::all());
}
}
| Method | URL | Name | Description |
|---|---|---|---|
| GET | /permission-manager | permission-manager.index | Dashboard |
| GET | /permission-manager/permissions | permission-manager.permissions | Permissions list |
| GET | /permission-manager/roles | permission-manager.roles | Roles list |
| GET | /permission-manager/roles/{id}/permissions | permission-manager.role-permissions | Assign permissions to role |
| GET | /permission-manager/users | permission-manager.users | Assign roles to users |
php artisan vendor:publish --tag=permission-manager-views
Views are published to resources/views/vendor/permission-manager/.
MIT — free to use in any project.
Made with ❤️ by CodeFlexTech
How can I help you explore Laravel packages today?