ultimatepos/Modules/ManagementTools/Console/ApplyExecutiveRoleMatrixCommand.php

74 lines
2.5 KiB
PHP

<?php
namespace Modules\ManagementTools\Console;
use Illuminate\Console\Command;
use Spatie\Permission\Models\Role;
class ApplyExecutiveRoleMatrixCommand extends Command
{
protected $signature = 'managementtools:apply-role-matrix {business_id}';
protected $description = 'Create and apply executive role matrix for a business';
public function handle()
{
$businessId = (int) $this->argument('business_id');
$matrix = [
"CEO#{$businessId}" => [
'managementtools.access',
'managementtools.daily_report_all',
'managementtools.board_view',
'managementtools.board_manage',
'managementtools.ticket_manage',
'managementtools.task_report',
'managementtools.manage_scores',
'managementtools.team_view',
],
"COO#{$businessId}" => [
'managementtools.access',
'managementtools.daily_report_all',
'managementtools.board_view',
'managementtools.manage_employee_tasks',
'managementtools.task_report',
'managementtools.team_view',
'managementtools.ticket_manage',
],
"CFO#{$businessId}" => [
'managementtools.access',
'managementtools.daily_report_all',
'managementtools.board_view',
'managementtools.board_manage',
'managementtools.ticket_manage',
],
"Board#{$businessId}" => [
'managementtools.access',
'managementtools.daily_report_all',
'managementtools.board_view',
],
"PMO#{$businessId}" => [
'managementtools.access',
'managementtools.daily_report_all',
'managementtools.task_report',
'managementtools.manage_employee_tasks',
'managementtools.board_view',
],
];
foreach ($matrix as $roleName => $permissions) {
$role = Role::firstOrCreate(
['name' => $roleName, 'guard_name' => 'web', 'business_id' => $businessId],
['is_default' => 0]
);
$role->syncPermissions($permissions);
$this->info("Role synced: {$roleName}");
}
$this->info("Executive role matrix applied for business #{$businessId}");
return self::SUCCESS;
}
}