ihtisham467/laravel-permission-editor
Simple visual UI to manage Spatie laravel-permission roles and permissions. Install the package, publish assets/config, then visit /permission-editor/roles to edit roles/permissions. Routes can be secured via middleware in config.
Prerequisite: Ensure spatie/laravel-permission is installed and configured in your Laravel project.
composer require spatie/laravel-permission
php artisan migrate
Install the Editor:
composer require ihtisham467/laravel-permission-editor
Publish Assets & Config:
php artisan vendor:publish --provider="Ihtisham467\LaravelPermissionEditor\PermissionEditorServiceProvider"
config/permission-editor.php (for route/middleware customization)public/vendor/laravel-permission-editor.First Use Case:
/permission-editor/roles in your browser./permission-editor/roles (list/edit roles)/permission-editor/permissions (list/edit permissions)/permission-editor/role-permissions (assign permissions to roles).Role Management:
Permission Assignment:
posts.create, posts.edit under posts).Integration with Spatie:
Role::findOrCreate(), Permission::create()).// Manually sync permissions (if needed outside the UI):
$role = Role::find(1);
$role->givePermissionTo('edit_posts'); // Uses Spatie's logic
Middleware & Security:
config/permission-editor.php:
'middleware' => ['auth', 'verified'], // Add your middleware
Gate::define('manage-permissions', function ($user) {
return $user->hasRole('admin');
});
Customization:
--tag=views and modify:
php artisan vendor:publish --tag=views --provider="Ihtisham467\LaravelPermissionEditor\PermissionEditorServiceProvider"
resources/views/vendor/laravel-permission-editor/.Permission::create('custom.namespace.action');
Route Conflicts:
/permission-editor/. If you have a route like /admin/permissions, add a prefix in the config:
'prefix' => 'admin',
Route::namespace() or adjust middleware in routes/web.php.Permission Hierarchy Issues:
posts.create). If you use custom formats, the tree view may break.Caching:
php artisan cache:clear
config/permission-editor.php for development:
'cache_enabled' => env('APP_DEBUG') ? false : true,
Asset Loading:
public/vendor/laravel-permission-editor directory exists.<link href="{{ asset('vendor/laravel-permission-editor/css/editor.css') }}" rel="stylesheet">
Permission Sync Delays:
Permission::cacheResolved().Role::resolveGate()).Permission::cacheResolved(false);
Log Operations:
config(['permission.debug' => true]);
Check Published Config:
config/permission-editor.php for:
drag_and_drop_enabled).Database Consistency:
php artisan db:seed --class=PermissionTableSeeder
Custom UI Components:
PermissionTree Vue component (published in resources/js/components).// resources/js/components/PermissionTree.vue
methods: {
renderPermission(permission) {
if (permission.namespace === 'custom') {
return h('span', { class: 'custom-permission' }, permission.name);
}
return h('span', permission.name);
}
}
API Endpoints:
// app/Http/Controllers/PermissionEditorController.php
public function customAction() {
// Add logic here
}
routes/web.php to include your endpoint.Localization:
php artisan vendor:publish --tag=lang --provider="Ihtisham467\LaravelPermissionEditor\PermissionEditorServiceProvider"
resources/lang/en/permission-editor.php.Testing:
$this->partialMock(Ihtisham467\LaravelPermissionEditor\Http\Controllers\PermissionEditorController::class, 'methodName');
$response = $this->actingAs($user)->get('/permission-editor/roles');
$response->assertStatus(200);
How can I help you explore Laravel packages today?