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'], 'purchase' => ['view', 'create', 'update', 'delete'], 'cutting' => ['view', 'create', 'update', 'delete'], 'restock' => ['view', 'create', 'update', 'delete'], 'transaction' => ['view', 'create', 'update', 'delete'], 'transaction' => ['view', 'create', 'update', 'delete'], 'dashboard' => ['attendance', 'revenue', 'expense', 'orders_channel', 'orders_payment', 'orders_marketing', 'orders_status'], 'analysis' => ['attendance', 'cash', 'raw_materials', 'product_stock', 'revenue', 'expense', 'profit_gross', 'profit_hpp', 'profit_orders', 'marketing_sales', 'top_suppliers', 'top_products', 'top_customers', 'busy_hours'], ]; 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.') || str_starts_with($p, 'purchase.') || str_starts_with($p, 'cutting.') || str_starts_with($p, 'restock.') || $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.') || str_starts_with($p, 'restock.') || $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); } } }