wijzijnweb/laravel-inertia-permissions

Easy to use package to implement Spatie's Permissions package into Inertia Laravel projects.
5,651 20
Install
composer require wijzijnweb/laravel-inertia-permissions
Latest Version:v1.1.0
PHP:^8.1
License:MIT
Last Updated:Jul 20, 2026
Links: GitHub  ·  Packagist
Maintainer: exapps

Implementing Spatie's Permissions package into Inertia Laravel project.

Easy to use package to implement Spatie's Permissions package into Inertia Laravel project. The package also includes a Vue components to display and edit the roles of the current user and to manage roles and permissions.

Installation

You can install the package via composer:

composer require wijzijnweb/laravel-inertia-permissions

You can publish and run the migrations with

php artisan migrate

Add the following to your vite.config.js file

resolve: {
    alias: {
        '@laravel-inertia-permissions': 'vendor/wijzijnweb/laravel-inertia-permissions/resources/js'
    }
}

Optionally, you can add the following to your jsconfig.json file:

{
    "compilerOptions": {
        "paths": {
            "@laravel-inertia-permissions/*": ["./vendor/wijzijnweb/laravel-inertia-permissions/resources/js/*"]
        }
    }
}

Configuration

By default, permission groups use the PermissionGroup model bundled with this package. If you need a custom implementation, add a permission_group key to the models array in your app's config/permission.php:

'models' => [
    'permission' => Spatie\Permission\Models\Permission::class,
    'role' => Spatie\Permission\Models\Role::class,
    'permission_group' => App\Models\PermissionGroup::class,
],

Your custom model should extend Wijzijnweb\LaravelInertiaPermissions\App\Models\PermissionGroup.

Usage

Permissions and Roles are automatically Shared with Inertia. You can access them in your Vue components like this:

import usePermissions from '@laravel-inertia-permissions/Uses/usePermissions.js';

const { can, is } = usePermissions()

if (can('edit articles')) {
    // do something
}

if (is('writer')) {
    // do something
}
import FormRoles from '@laravel-inertia-permissions/Components/FormRoles.vue';
import FormPermissions from '@laravel-inertia-permissions/Components/FormPermissions.vue';

<FormRoles v-model="form.roles" />
<FormPermissions v-model="form.permissions" />

You can also use the directives to hide specific elements. To that you need to register the directives in your app.js file:

import {
    hasRoleDirective,
    hasPermissionDirective
} from '@laravel-inertia-permissions/Directives/permissionDirective.js';

createApp({render: () => h(App, props)})
    .directive('hasRole', hasRoleDirective)
    .directive('hasPermission', hasPermissionDirective)

After that you can use the directives in your Vue components: You can use the pipe symbol and the ampersand to check for multiple roles or permissions:

 <MyComponent v-has-role="'admin|writer'" />
 <MyComponent v-has-permission="'edit articles&delete articles'" />

There is also a component to prevent the user from seeing something with a feedback message:

import HasPermission from '@laravel-inertia-permissions/Components/HasPermission.vue';

<HasPermission permission="edit articles" role="writer">
    <p>You can edit articles</p>
</HasPermission>

Changelog

Please see CHANGELOG for more information on what has changed recently.

Credits

License

The MIT License (MIT). Please see License File for more information.

Related Packages

tomatophp/tomato-roles-module

ACL Roles / Permissions for Tomato Admin build for Splade

890 0
beartropy/permissions

Visual UI for spatie/laravel-permission using the Beartropy ecosystem

682 0
spatie/laravel-permission

Permission handling for Laravel 12 and up

108,283,406 12,949
tomatophp/tomato-roles

ACL Roles / Permissions for Tomato Admin build for Splade

4,347 2