119 lines
5.0 KiB
PHP
119 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use Spatie\Permission\Models\Permission;
|
|
use Spatie\Permission\Models\Role;
|
|
use Spatie\Permission\PermissionRegistrar;
|
|
|
|
class RolePermissionSeeder extends Seeder
|
|
{
|
|
public function run(): void
|
|
{
|
|
app()[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);
|
|
}
|
|
}
|
|
}
|