plugins/laravel-expert/skills/laravel-permission/SKILL.md
Spatie Laravel Permission - roles, permissions, middleware, Blade directives, teams, wildcards, super-admin, API, testing. Use when implementing RBAC, role-based access control, or user authorization.
npx skillsauth add fusengine/agents laravel-permissionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before ANY implementation, use TeamCreate to spawn 3 agents:
After implementation, run fuse-ai-pilot:sniper for validation.
Spatie Laravel Permission provides complete role-based access control (RBAC) for Laravel applications.
| Component | Purpose | |-----------|---------| | Role | Group of permissions (admin, writer) | | Permission | Single ability (edit articles) | | Middleware | Route protection | | Blade Directives | UI authorization | | Teams | Multi-tenant scoping | | Wildcards | Hierarchical permissions | | Super Admin | Bypass all checks | | Events | Audit logging (v6.15.0+) | | Query Scopes | Filter users by role/permission | | API Support | Sanctum/Passport integration | | Policies | Resource-based authorization |
DatabaseSeederphp artisan permission:cache-resetedit-articlespermission:edit,api| Topic | Reference | When to consult | |-------|-----------|-----------------| | Setup | spatie-permission.md | Installation, model setup, core methods | | Middleware | middleware.md | Route protection patterns | | Blade | blade-directives.md | UI authorization directives | | Direct vs Role | direct-permissions.md | Permission inheritance |
| Topic | Reference | When to consult | |-------|-----------|-----------------| | Teams | teams.md | Multi-tenant permissions | | Wildcards | wildcard-permissions.md | Hierarchical patterns | | Super Admin | super-admin.md | Bypass all permissions | | Custom Models | custom-models.md | UUID, extending models |
| Topic | Reference | When to consult |
|-------|-----------|-----------------|
| API Usage | api-usage.md | Sanctum, guards, JSON responses |
| Policies | policies.md | Laravel Policy integration |
| Query Scopes | query-scopes.md | User::role(), User::permission() |
| Events | events.md | Audit logging, notifications |
| Topic | Reference | When to consult | |-------|-----------|-----------------| | Cache | cache.md | Performance, debugging | | CLI | artisan-commands.md | Artisan commands | | Testing | testing.md | Tests, factories, setup | | Performance | performance.md | Optimization, N+1, caching |
| Template | Purpose | |----------|---------| | UserModel.php.md | User model with HasRoles trait | | RoleSeeder.php.md | Basic role seeding | | PermissionSeeder.php.md | Permission creation seeder | | WildcardSeeder.php.md | Hierarchical permissions |
| Template | Purpose | |----------|---------| | routes-example.md | Protected routes examples | | ControllerMiddleware.php.md | Middleware in controllers | | BladeExamples.blade.md | Blade directive examples |
| Template | Purpose | |----------|---------| | TeamMiddleware.php.md | Multi-tenant middleware | | TeamSeeder.php.md | Team-scoped roles seeder | | TeamModel.php.md | Team model with boot |
| Template | Purpose | |----------|---------| | SuperAdminSetup.php.md | Gate::before bypass | | CacheConfig.php.md | Cache configuration | | DeployScript.sh.md | CI/CD cache management |
| Template | Purpose | |----------|---------| | ApiPermissionSetup.php.md | API guard + Sanctum | | ApiExceptionHandler.php.md | JSON error responses | | ApiUserResource.php.md | User resource with permissions |
| Template | Purpose | |----------|---------| | PostPolicy.php.md | Policy with Spatie integration | | PermissionEventListener.php.md | Audit event listeners | | UserQueryExamples.php.md | Query scope examples | | PermissionAudit.php.md | Audit service |
| Template | Purpose | |----------|---------| | PermissionTest.php.md | Pest & PHPUnit tests | | UserFactory.php.md | Factory with permission states |
| Template | Purpose | |----------|---------| | CustomRole.php.md | Extended Role model | | CustomPermission.php.md | Extended Permission model | | UUIDMigration.php.md | UUID tables migration | | SetupPermissions.php.md | Custom artisan command |
$user->assignRole('admin');
$user->can('edit articles');
Route::middleware(['role:admin'])->group(fn () => ...);
Route::middleware(['auth:sanctum', 'permission:edit,api'])->group(fn () => ...);
@role('admin') ... @endrole
@can('edit articles') ... @endcan
User::role('admin')->get();
User::permission('edit articles')->get();
setPermissionsTeamId($team->id);
$role->givePermissionTo('articles.*');
Gate::before(fn ($user, $ability) =>
$user->hasRole('Super-Admin') ? true : null
);
beforeEach(fn () => app(PermissionRegistrar::class)->forgetCachedPermissions());
| Feature | Status | Reference | |---------|--------|-----------| | Basic RBAC | ✅ | spatie-permission.md | | Middleware | ✅ | middleware.md | | Blade Directives | ✅ | blade-directives.md | | Multi-Guard (web/api) | ✅ | middleware.md, api-usage.md | | Teams (Multi-Tenant) | ✅ | teams.md | | Wildcard Permissions | ✅ | wildcard-permissions.md | | Super Admin | ✅ | super-admin.md | | Cache Management | ✅ | cache.md | | Direct vs Role Perms | ✅ | direct-permissions.md | | Artisan Commands | ✅ | artisan-commands.md | | UUID Support | ✅ | custom-models.md | | Custom Models | ✅ | custom-models.md | | Events (v6.15.0+) | ✅ | events.md | | Query Scopes | ✅ | query-scopes.md | | Policy Integration | ✅ | policies.md | | API / Sanctum | ✅ | api-usage.md | | Testing | ✅ | testing.md | | Performance | ✅ | performance.md |
Spatie Permission 6.24 est compatible Laravel 13. Intégrations L13 :
spatie.permission.cache devient spatie-permission-cache ; configurer permission.cache.key si rétro-compat requise#[Authorize] (policy) et #[Middleware('role:admin')] (RBAC) — voir [[laravel-blade]]final readonly class pour Role/Permission DTOs custom#[Middleware(['auth', 'role:admin|editor'])]
#[Authorize('update', Post::class)]
public function update(UpdatePostRequest $request, Post $post) { /* ... */ }
permission:create-post (verb-noun) pour clartéteams uniquement si réel multi-tenantCache::remember('user.permissions.'.$id, ...))Gate::before() (jamais via permission wildcard *)hasRole() et hasPermissionTo() sans cohérence d'architectureRoleEnum)assignRole() en seeder* à un super admin (préférer Gate::before() ciblé)development
Use when optimizing entity-based / semantic SEO 2026. Covers entity maps, Google Knowledge Graph resolution, salience scoring, passage-level ranking, about/sameAs/knowsAbout schema, Cloud Natural Language API validation.
development
Use when running SEO, GEO, schema, Core Web Vitals, sitemap, hreflang, E-E-A-T, AI Overviews, technical SEO, or structured data tasks. Covers full-site audits, single-page analysis, schema markup, content quality, AI search optimization, local SEO, sitemap/robots, internal linking, semantic clustering, and search experience.
development
Use when optimizing search experience (SXO). Covers intent matching, user personas, user stories, page-type analysis, dwell time, scroll depth, pogo-sticking prevention.
development
Use when optimizing local SEO. Covers Google Business Profile, NAP consistency, citations, reviews acquisition, Local Pack ranking, location pages, LocalBusiness schema.