laravel-rbac-permissionslisted
Install: claude install-skill Yaz-inc/yazinc-ai-toolkit
# Laravel RBAC Permissions
Module-level access control: **`permission:module,read`** / **`permission:module,write`** on routes, backed by `user_permissions` rows per user.
## When to use
- Admin app with multiple modules and staff roles
- Need read vs write separation (view list vs create/edit/delete)
- Super admin bypass; optional separate portal/customer user type blocked from admin
## Stack
- Laravel 10, session auth
- Middleware: `CheckPermission`, `SuperAdminOnly`
- Model: `UserPermission` + `User::hasPermission()`
## Roles (simple enum on users.role)
| Role | Behavior |
|------|----------|
| `super_admin` | Passes all permission checks |
| `manager` | Module permissions from DB |
| `data_view_only` | Read-only via permissions |
Adjust role names per project.
## Database
```php
Schema::create('user_permissions', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->string('module', 50);
$table->boolean('can_read')->default(false);
$table->boolean('can_write')->default(false);
$table->boolean('can_view')->default(false);
$table->boolean('can_access')->default(false); // for report-only modules
$table->timestamps();
$table->unique(['user_id', 'module']);
});
```
Define module slugs in `UserPermission::getModules()` — use kebab/snake slugs matching routes.
## Register middleware
```php
// app/Http/Kernel.php
'permission' => \App\Http\Middleware\CheckPermission::cla