← スキル一覧に戻る

laravel-permission
by fusengine
Redefining development through cognitive automation and collaborative agent systems.
⭐ 0🍴 0📅 2026年1月25日
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
- Seed roles/permissions in
DatabaseSeeder - Cache reset after changes:
php artisan permission:cache-reset - Multi-guard support in
config/permission.php - Teams for multi-tenant:
'teams' => true - Naming use kebab-case:
edit-articles
スコア
総合スコア
60/100
リポジトリの品質指標に基づく評価
✓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
レビュー
💬
レビュー機能は近日公開予定です