dstpabuaran.com/database/seeders/RolePermissionSeeder.php
Yoga Pangestu e9237f857e feat: add role management functionality with create, edit, and delete capabilities
- Implemented RoleEdit component for editing roles with permissions.
- Created RoleIndex component for listing roles with delete confirmation.
- Added routes for role management in web.php with appropriate permissions.
- Developed RoleTest to cover authentication, authorization, and data integrity for role management.
2026-07-31 23:15:55 +07:00

118 lines
4.9 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RolePermissionSeeder extends Seeder
{
public function run(): void
{
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
$permissions = [
'user' => ['view', 'create', 'update', 'delete', 'toggle-active', 'reset-password'],
'category' => ['view', 'create', 'update', 'delete'],
'supplier' => ['view', 'create', 'update', 'delete'],
'customer' => ['view', 'create', 'update', 'delete'],
'cash-account' => ['view', 'deposit', 'withdrawal', 'update', 'delete'],
'expense' => ['view', 'create', 'update', 'delete'],
'employee-advance' => ['view', 'create', 'update', 'delete', 'approve', 'pay'],
'payroll-period' => ['view', 'show', 'current', 'close', 'reopen'],
'payroll' => ['pay', 'cancel'],
'payroll-adjustment' => ['create', 'delete'],
'leave-request' => ['view', 'create', 'update', 'delete', 'approve', 'reject'],
'attendance' => ['view', 'check-in', 'check-out', 'by-date'],
'settings' => ['view', 'update-system', 'update-homepage', 'update-social-media', 'update-marketplace', 'update-hr'],
];
foreach ($permissions as $module => $actions) {
foreach ($actions as $action) {
Permission::firstOrCreate(['name' => "{$module}.{$action}"]);
}
}
$allPermissions = Permission::all()->pluck('name')->toArray();
$rolePermissions = [
'Developer' => $allPermissions,
'Owner' => array_filter($allPermissions, fn($p) => !str_starts_with($p, 'settings.update-')),
'Direktur' => array_filter($allPermissions, function ($p) {
return str_ends_with($p, '.view')
|| str_starts_with($p, 'payroll-period.')
|| $p === 'payroll.pay'
|| $p === 'leave-request.approve'
|| $p === 'leave-request.reject'
|| $p === 'attendance.by-date';
}),
'Admin Bahan Baku' => array_filter($allPermissions, function ($p) {
return str_starts_with($p, 'supplier.')
|| $p === 'category.view'
|| $p === 'customer.view'
|| $p === 'cash-account.view';
}),
'Admin Toko' => array_filter($allPermissions, function ($p) {
return str_starts_with($p, 'category.')
|| str_starts_with($p, 'customer.')
|| str_starts_with($p, 'expense.')
|| $p === 'cash-account.view'
|| $p === 'leave-request.view'
|| $p === 'leave-request.create'
|| str_starts_with($p, 'attendance.');
}),
'Marketing Offline' => array_filter($allPermissions, function ($p) {
return str_starts_with($p, 'customer.')
|| $p === 'category.view'
|| $p === 'supplier.view'
|| $p === 'leave-request.view'
|| $p === 'leave-request.create'
|| $p === 'attendance.check-in'
|| $p === 'attendance.check-out';
}),
'Marketing Online' => array_filter($allPermissions, function ($p) {
return str_starts_with($p, 'customer.')
|| $p === 'category.view'
|| $p === 'supplier.view'
|| $p === 'leave-request.view'
|| $p === 'leave-request.create'
|| $p === 'attendance.check-in'
|| $p === 'attendance.check-out';
}),
'Kasir' => array_filter($allPermissions, function ($p) {
return str_starts_with($p, 'cash-account.')
|| $p === 'expense.view'
|| $p === 'leave-request.view'
|| $p === 'leave-request.create'
|| $p === 'attendance.check-in'
|| $p === 'attendance.check-out';
}),
'Stok Opname' => array_filter($allPermissions, function ($p) {
return str_starts_with($p, 'supplier.')
|| $p === 'category.view'
|| $p === 'cash-account.view'
|| $p === 'leave-request.view'
|| $p === 'leave-request.create'
|| $p === 'attendance.check-in'
|| $p === 'attendance.check-out';
}),
'Non Operator' => array_filter($allPermissions, fn($p) => str_ends_with($p, '.view')),
];
foreach ($rolePermissions as $roleName => $perms) {
$role = Role::firstOrCreate(['name' => $roleName]);
$role->syncPermissions($perms);
}
}
}