Back to Skills

laravel-permission

verified

Spatie Laravel Permission - roles, permissions, middleware, Blade directives. Use when implementing RBAC, role-based access control, or user authorization.

View on GitHub

Marketplace

fusengine-plugins

fusengine/agents

Plugin

fuse-laravel

development

Repository

fusengine/agents

plugins/laravel-expert/skills/laravel-permission/SKILL.md

Last Verified

January 22, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/fusengine/agents/blob/main/plugins/laravel-expert/skills/laravel-permission/SKILL.md -a claude-code --skill laravel-permission

Installation paths:

Claude
.claude/skills/laravel-permission/
Powered by add-skill CLI

Instructions

# Laravel Permission (Spatie)

## Installation

```bash
composer require spatie/laravel-permission
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan optimize:clear
php artisan migrate
```

---

## User Model Setup

```php
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}
```

---

## Create Roles & Permissions

```php
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

// Roles
$admin = Role::create(['name' => 'admin']);
$writer = Role::create(['name' => 'writer']);

// Permissions
Permission::create(['name' => 'edit articles']);
Permission::create(['name' => 'publish articles']);

// Assign permissions to role
$admin->givePermissionTo(['edit articles', 'publish articles']);
```

---

## Assign to Users

```php
// Assign role
$user->assignRole('writer');
$user->assignRole(['writer', 'admin']);

// Direct permissions
$user->givePermissionTo('edit articles');

// Sync (replace all)
$user->syncRoles(['writer']);
$user->syncPermissions(['edit articles']);

// Remove
$user->removeRole('writer');
$user->revokePermissionTo('edit articles');
```

---

## Check Permissions

```php
// Check role
$user->hasRole('admin');
$user->hasAnyRole(['writer', 'admin']);
$user->hasAllRoles(['writer', 'admin']);

// Check permission
$user->hasPermissionTo('edit articles');
$user->can('edit articles');

// Get all
$user->getRoleNames();
$user->getPermissionNames();
```

---

## Middleware

```php
// routes/web.php
Route::middleware(['role:admin'])->group(function () {
    Route::get('/admin', [AdminController::class, 'index']);
});

Route::middleware(['permission:publish articles'])->group(function () {
    Route::post('/publish', [ArticleController::class, 'publish']);
});

// Role OR permission
Route::middleware(['role_or_permission:admin|edit articles'])->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index']);
});
```

---

## Blade Direc

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
2799 chars