givanov95/laravel-roles-permissions-crud
| Install | |
|---|---|
composer require givanov95/laravel-roles-permissions-crud |
|
| Latest Version: | v4.0.0 |
| PHP: | ^8.3 |
| License: | MIT |
| Last Updated: | Jul 27, 2026 |
| Links: | GitHub · Packagist |
laravel-roles-permissions-crud
Admin CRUD for spatie/laravel-permission roles & permissions on Laravel + Inertia, with a matching Vue 3 frontend.
The PHP package (givanov95/laravel-roles-permissions-crud) ships the controllers,
form requests and a route macro. The npm package (@givanov95/vue-roles-permissions-crud)
ships the Vue components you drop into thin page shells inside your own admin layout.
Why thin shells?
Full Inertia pages cannot be resolved from a package (the Inertia resolver only globs
the host app's resources/js/pages). So — exactly like @givanov95/vue-data-table —
the package ships components; each app keeps a ~10-line page shell that wraps the
component in its own layout. The shared logic lives in the package; only the layout
stays local.
Install
composer require givanov95/laravel-roles-permissions-crud
npm install @givanov95/vue-roles-permissions-crud
Local development (path / file: link)
Until the packages are published, link them locally.
composer.json:
"repositories": [
{ "type": "path", "url": "../laravel-roles-permissions-crud" }
],
"require": {
"givanov95/laravel-roles-permissions-crud": "*"
}
package.json:
"dependencies": {
"@givanov95/vue-roles-permissions-crud": "file:../laravel-roles-permissions-crud"
}
Vite must bundle the package source (it ships .ts/.vue, not a build):
// vite.config.ts — ssr.noExternal
noExternal: ['@givanov95/vue-roles-permissions-crud', '@givanov95/vue-forms']
Backend wiring
-
(Optional) publish & tune the config:
php artisan vendor:publish --tag=roles-permissions-crud-configKeys:
guard,authorize_permissions,protected_roles,prefix,route_name_prefix,middleware,page_prefix. Defaults gate the admin area by theview-roles/view-permissionspermissions (/admin/roles, route namesadmin.roles.*, Inertia pagesAdmin/Roles/*); seed those permissions and grant them to your admin role. -
Register the routes in
routes/web.php:Route::rolesPermissionsCrud();This creates
admin.roles.*andadmin.permissions.*resource routes (minusshow) under the configured prefix and middleware, with per-resourcepermission:middleware fromauthorize_permissions.
Frontend wiring
-
Register the runtime config once in your app entrypoint:
import { RolesPermissionsPlugin, RolesPlugin, PermissionsPlugin } from '@givanov95/vue-roles-permissions-crud'; app.use(RolesPermissionsPlugin, { translator: (key, replacements) => (window as any).__(key, replacements), route: (...args) => (window as any).route(...args), routeNamePrefix: 'admin.', // must match config('roles-permissions-crud.route_name_prefix') }); // Optional global $hasRole / $can helpers: app.use(RolesPlugin).use(PermissionsPlugin); -
Add thin page shells under
resources/js/pages/Admin/:<!-- Admin/Roles/Index.vue --> <script setup lang="ts"> import { RolesManager } from '@givanov95/vue-roles-permissions-crud'; import AdminLayout from '@/layouts/AdminLayout.vue'; defineProps<{ roles: any[] }>(); </script> <template> <AdminLayout :title="__('Roles')"> <template #header><h1 class="text-xl font-semibold text-gray-800">{{ __('Roles') }}</h1></template> <RolesManager :roles="roles" /> </AdminLayout> </template>Components & the props each shell forwards:
Page Component Props Admin/Roles/IndexRolesManagerrolesAdmin/Roles/CreateRoleFormpermissionsAdmin/Roles/EditRoleFormrole,permissionsAdmin/Permissions/IndexPermissionsManagerpermissionsAdmin/Permissions/CreatePermissionForm— Admin/Permissions/EditPermissionFormpermission
License
MIT © Georgi Ivanov
Related Packages
RBAC (roles & permissions) para Laravel + Inertia + Vue, com ULID, catálogo de p...
Forked from spatie/laravel-permission. this package for handler mongodb purpose...
Hyro is a modular Laravel RBAC ecosystem featuring advanced role-permission mana...
Production-ready Laravel starter kit with a full admin panel, role-based access...