466 lines
17 KiB
PHP
466 lines
17 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 = [
|
|
'dashboard' => ['view', 'attendance', 'revenue', 'expense', 'orders_channel', 'orders_payment', 'orders_marketing', 'orders_status', 'cash'],
|
|
'analysis' => ['view', 'attendance', 'cash', 'product_stock', 'revenue', 'revenue_trend', 'expense', 'busy_hours', 'profit_orders', 'profit_hpp', 'profit_gross', 'profit_margin', 'top_customers', 'top_products', 'top_suppliers', 'marketing_sales', 'raw_materials'],
|
|
'employees' => ['view', 'create', 'update', 'delete', 'toggle_status', 'reset_password'],
|
|
'attendances' => ['view', 'create', 'delete', 'manage'],
|
|
'leave_requests' => ['view', 'create', 'update', 'delete', 'verify'],
|
|
'categories' => ['view', 'create', 'update', 'delete'],
|
|
'customers' => ['view', 'create', 'update', 'delete'],
|
|
'products' => ['view', 'create', 'update', 'delete', 'toggle_status', 'toggle_featured', 'transfer_stock', 'view_stock_mutations'],
|
|
'stocks' => ['view'],
|
|
'orders' => ['view', 'create', 'update', 'delete', 'send', 'complete', 'cancel'],
|
|
'cuttings' => ['view', 'create', 'update', 'delete', 'complete'],
|
|
'cash' => ['view', 'deposit', 'withdraw', 'update', 'delete'],
|
|
'expenses' => ['view', 'create', 'update', 'delete'],
|
|
'activity_logs' => ['view'],
|
|
'employee_advances' => ['view', 'create', 'update', 'delete', 'pay', 'view_payments', 'verify'],
|
|
'payroll' => ['view', 'pay', 'cancel', 'adjust'],
|
|
'restocks' => ['view', 'create', 'update', 'delete'],
|
|
'raw_materials' => ['view', 'create', 'update', 'delete', 'toggle_status'],
|
|
'suppliers' => ['view', 'create', 'update', 'delete'],
|
|
'purchases' => ['view', 'create', 'update', 'delete'],
|
|
'stok_opnames' => ['view', 'create', 'update', 'delete', 'submit', 'verify'],
|
|
'invoices' => ['view', 'create', 'update', 'delete'],
|
|
'roles' => ['view', 'create', 'update', 'delete'],
|
|
'settings' => ['view_system', 'update_system', 'view_homepage', 'update_homepage', 'view_social_media', 'update_social_media', 'view_hr', 'update_hr'],
|
|
];
|
|
|
|
foreach ($permissions as $module => $actions) {
|
|
foreach ($actions as $action) {
|
|
Permission::firstOrCreate(['name' => "{$module}.{$action}"]);
|
|
}
|
|
}
|
|
|
|
$allPermissions = Permission::all()->pluck('name')->toArray();
|
|
|
|
$excludedFromDeveloperOwner = [
|
|
'attendances.create',
|
|
'attendances.delete',
|
|
'stok_opnames.submit',
|
|
'roles.view',
|
|
'roles.create',
|
|
'roles.update',
|
|
'roles.delete',
|
|
];
|
|
|
|
$developerOwnerPerms = array_values(array_filter(
|
|
$allPermissions,
|
|
fn ($p) => ! in_array($p, $excludedFromDeveloperOwner, true)
|
|
));
|
|
|
|
$rolePermissions = [
|
|
'developer' => $developerOwnerPerms,
|
|
|
|
'owner' => $developerOwnerPerms,
|
|
|
|
'admin-toko' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
'dashboard.attendance',
|
|
'dashboard.revenue',
|
|
'dashboard.expense',
|
|
'dashboard.orders_channel',
|
|
'dashboard.orders_payment',
|
|
'dashboard.orders_marketing',
|
|
'dashboard.orders_status',
|
|
|
|
'analysis.view',
|
|
'analysis.attendance',
|
|
'analysis.cash',
|
|
'analysis.product_stock',
|
|
'analysis.revenue',
|
|
'analysis.revenue_trend',
|
|
'analysis.expense',
|
|
'analysis.busy_hours',
|
|
'analysis.profit_orders',
|
|
'analysis.profit_hpp',
|
|
'analysis.profit_gross',
|
|
'analysis.profit_margin',
|
|
'analysis.top_customers',
|
|
'analysis.top_products',
|
|
'analysis.marketing_sales',
|
|
|
|
'stok_opnames.view',
|
|
|
|
'attendances.view',
|
|
'attendances.create',
|
|
'attendances.delete',
|
|
|
|
'leave_requests.view',
|
|
'leave_requests.create',
|
|
'leave_requests.update',
|
|
'leave_requests.delete',
|
|
|
|
'restocks.view',
|
|
'restocks.create',
|
|
'restocks.update',
|
|
'restocks.delete',
|
|
|
|
'categories.view',
|
|
'categories.create',
|
|
'categories.update',
|
|
'categories.delete',
|
|
|
|
'customers.view',
|
|
'customers.create',
|
|
'customers.update',
|
|
'customers.delete',
|
|
|
|
'products.view',
|
|
'products.create',
|
|
'products.update',
|
|
'products.delete',
|
|
'products.toggle_status',
|
|
'products.toggle_featured',
|
|
'products.transfer_stock',
|
|
'products.view_stock_mutations',
|
|
|
|
'orders.view',
|
|
'orders.create',
|
|
'orders.update',
|
|
'orders.delete',
|
|
'orders.send',
|
|
'orders.complete',
|
|
'orders.cancel',
|
|
|
|
'cash.view',
|
|
'cash.deposit',
|
|
'cash.withdraw',
|
|
'cash.update',
|
|
'cash.delete',
|
|
|
|
'expenses.view',
|
|
'expenses.create',
|
|
'expenses.update',
|
|
'expenses.delete',
|
|
|
|
'employee_advances.view',
|
|
'employee_advances.create',
|
|
'employee_advances.update',
|
|
'employee_advances.delete',
|
|
'employee_advances.pay',
|
|
'employee_advances.view_payments',
|
|
'employee_advances.verify',
|
|
|
|
'payroll.view',
|
|
'payroll.adjust',
|
|
'payroll.pay',
|
|
'payroll.cancel',
|
|
|
|
'settings.view_system',
|
|
'settings.update_system',
|
|
'settings.view_social_media',
|
|
'settings.update_social_media',
|
|
'settings.view_hr',
|
|
'settings.update_hr',
|
|
'settings.view_homepage',
|
|
'settings.update_homepage',
|
|
|
|
'employees.view',
|
|
'employees.create',
|
|
'employees.update',
|
|
'employees.toggle_status',
|
|
'employees.delete',
|
|
], true);
|
|
})),
|
|
|
|
'cashier' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
'dashboard.revenue',
|
|
'dashboard.orders_channel',
|
|
'dashboard.orders_payment',
|
|
'dashboard.orders_status',
|
|
|
|
'analysis.view',
|
|
'analysis.attendance',
|
|
'analysis.revenue',
|
|
'analysis.profit_orders',
|
|
'analysis.top_customers',
|
|
'analysis.top_products',
|
|
|
|
'attendances.view',
|
|
'attendances.create',
|
|
'attendances.delete',
|
|
|
|
'leave_requests.view',
|
|
'leave_requests.create',
|
|
'leave_requests.update',
|
|
'leave_requests.delete',
|
|
|
|
'customers.view',
|
|
'customers.create',
|
|
'customers.update',
|
|
'customers.delete',
|
|
|
|
'products.view',
|
|
|
|
'orders.view',
|
|
'orders.create',
|
|
'orders.update',
|
|
'orders.delete',
|
|
'orders.send',
|
|
'orders.complete',
|
|
'orders.cancel',
|
|
|
|
'employee_advances.view',
|
|
'employee_advances.create',
|
|
'employee_advances.update',
|
|
'employee_advances.delete',
|
|
'employee_advances.view_payments',
|
|
|
|
'payroll.view',
|
|
], true);
|
|
})),
|
|
|
|
'admin-bahan-baku' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
|
|
'employees.view',
|
|
'employees.create',
|
|
'employees.update',
|
|
'employees.toggle_status',
|
|
'employees.delete',
|
|
|
|
'suppliers.view',
|
|
'suppliers.create',
|
|
'suppliers.update',
|
|
'suppliers.delete',
|
|
|
|
'raw_materials.view',
|
|
'raw_materials.create',
|
|
'raw_materials.update',
|
|
'raw_materials.delete',
|
|
'raw_materials.toggle_status',
|
|
|
|
'cuttings.view',
|
|
'cuttings.create',
|
|
'cuttings.update',
|
|
'cuttings.delete',
|
|
'cuttings.complete',
|
|
|
|
'purchases.view',
|
|
'purchases.create',
|
|
'purchases.update',
|
|
'purchases.delete',
|
|
], true);
|
|
})),
|
|
|
|
'marketing-offline' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
'dashboard.revenue',
|
|
'dashboard.orders_channel',
|
|
'dashboard.orders_payment',
|
|
'dashboard.orders_marketing',
|
|
'dashboard.orders_status',
|
|
|
|
'analysis.view',
|
|
'analysis.attendance',
|
|
'analysis.revenue',
|
|
'analysis.profit_orders',
|
|
'analysis.top_products',
|
|
'analysis.top_customers',
|
|
|
|
'attendances.view',
|
|
'attendances.create',
|
|
|
|
'leave_requests.view',
|
|
'leave_requests.create',
|
|
'leave_requests.update',
|
|
'leave_requests.delete',
|
|
|
|
'products.view',
|
|
|
|
'orders.view',
|
|
|
|
'employee_advances.view',
|
|
'employee_advances.create',
|
|
'employee_advances.update',
|
|
'employee_advances.delete',
|
|
'employee_advances.view_payments',
|
|
|
|
'payroll.view',
|
|
], true);
|
|
})),
|
|
|
|
'marketing-online' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
'dashboard.revenue',
|
|
'dashboard.orders_channel',
|
|
'dashboard.orders_payment',
|
|
'dashboard.orders_marketing',
|
|
'dashboard.orders_status',
|
|
|
|
'analysis.view',
|
|
'analysis.attendance',
|
|
'analysis.revenue',
|
|
'analysis.profit_orders',
|
|
'analysis.top_products',
|
|
'analysis.top_customers',
|
|
|
|
'attendances.view',
|
|
'attendances.create',
|
|
|
|
'leave_requests.view',
|
|
'leave_requests.create',
|
|
'leave_requests.update',
|
|
'leave_requests.delete',
|
|
|
|
'products.view',
|
|
|
|
'orders.view',
|
|
|
|
'employee_advances.view',
|
|
'employee_advances.create',
|
|
'employee_advances.update',
|
|
'employee_advances.delete',
|
|
'employee_advances.view_payments',
|
|
|
|
'payroll.view',
|
|
], true);
|
|
})),
|
|
|
|
'direktur' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
'dashboard.attendance',
|
|
'dashboard.revenue',
|
|
'dashboard.expense',
|
|
'dashboard.orders_channel',
|
|
'dashboard.orders_payment',
|
|
'dashboard.orders_marketing',
|
|
'dashboard.orders_status',
|
|
|
|
'analysis.view',
|
|
'analysis.attendance',
|
|
'analysis.cash',
|
|
'analysis.product_stock',
|
|
'analysis.revenue',
|
|
'analysis.revenue_trend',
|
|
'analysis.expense',
|
|
'analysis.busy_hours',
|
|
'analysis.profit_orders',
|
|
'analysis.profit_hpp',
|
|
'analysis.profit_gross',
|
|
'analysis.profit_margin',
|
|
'analysis.top_customers',
|
|
'analysis.top_products',
|
|
'analysis.marketing_sales',
|
|
|
|
'employees.view',
|
|
|
|
'attendances.view',
|
|
'attendances.create',
|
|
'attendances.delete',
|
|
'attendances.manage',
|
|
|
|
'leave_requests.view',
|
|
'leave_requests.create',
|
|
'leave_requests.update',
|
|
'leave_requests.delete',
|
|
|
|
'categories.view',
|
|
|
|
'customers.view',
|
|
|
|
'products.view',
|
|
|
|
'orders.view',
|
|
|
|
'cash.view',
|
|
|
|
'expenses.view',
|
|
|
|
'employee_advances.view',
|
|
'employee_advances.create',
|
|
'employee_advances.update',
|
|
'employee_advances.delete',
|
|
'employee_advances.pay',
|
|
'employee_advances.view_payments',
|
|
'employee_advances.verify',
|
|
|
|
'payroll.view',
|
|
|
|
'activity_logs.view'
|
|
], true);
|
|
})),
|
|
|
|
'non-operator' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
|
|
'analysis.view',
|
|
'analysis.attendance',
|
|
|
|
'attendances.view',
|
|
'attendances.create',
|
|
|
|
'leave_requests.view',
|
|
'leave_requests.create',
|
|
'leave_requests.update',
|
|
'leave_requests.delete',
|
|
|
|
'employee_advances.view',
|
|
'employee_advances.create',
|
|
'employee_advances.update',
|
|
'employee_advances.delete',
|
|
|
|
'payroll.view',
|
|
], true);
|
|
})),
|
|
|
|
'stok-opname' => array_values(array_filter($allPermissions, function ($p) {
|
|
return in_array($p, [
|
|
'dashboard.view',
|
|
|
|
'attendances.view',
|
|
'attendances.create',
|
|
|
|
'leave_requests.view',
|
|
'leave_requests.create',
|
|
'leave_requests.update',
|
|
'leave_requests.delete',
|
|
|
|
'products.view',
|
|
|
|
'stok_opnames.view',
|
|
'stok_opnames.create',
|
|
'stok_opnames.update',
|
|
'stok_opnames.delete',
|
|
'stok_opnames.submit',
|
|
|
|
'employee_advances.view',
|
|
'employee_advances.create',
|
|
'employee_advances.update',
|
|
'employee_advances.delete',
|
|
|
|
'payroll.view',
|
|
], true);
|
|
})),
|
|
];
|
|
|
|
foreach ($rolePermissions as $roleName => $perms) {
|
|
$role = Role::firstOrCreate(['name' => $roleName]);
|
|
$role->syncPermissions($perms);
|
|
}
|
|
}
|
|
}
|