Back to list
fusengine

laravel-permission

by fusengine

Redefining development through cognitive automation and collaborative agent systems.

0🍴 0📅 Jan 25, 2026

SKILL.md


name: laravel-permission description: Spatie Laravel Permission - roles, permissions, middleware, Blade directives. Use when implementing RBAC, role-based access control, or user authorization. user-invocable: false

Laravel Permission (Spatie)

Installation

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

User Model Setup

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}

Create Roles & Permissions

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

// 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

// 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

// 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 Directives

@role('admin')
    <a href="/admin">Admin Panel</a>
@endrole

@hasrole('writer|admin')
    <p>Editor access</p>
@endhasrole

@can('edit articles')
    <button>Edit</button>
@endcan

@canany(['edit articles', 'publish articles'])
    <div>Actions available</div>
@endcanany

Seeder Example

// database/seeders/RoleSeeder.php
public function run(): void
{
    $admin = Role::create(['name' => 'admin']);
    $admin->givePermissionTo(Permission::all());

    $writer = Role::create(['name' => 'writer']);
    $writer->givePermissionTo(['edit articles']);
}

Best Practices

  1. Seed roles/permissions in DatabaseSeeder
  2. Cache reset after changes: php artisan permission:cache-reset
  3. Multi-guard support in config/permission.php
  4. Teams for multi-tenant: 'teams' => true
  5. Naming use kebab-case: edit-articles

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon