commit13
This commit is contained in:
@@ -10,6 +10,38 @@ use Illuminate\Support\Facades\Schema;
|
||||
class OrganizationAccess
|
||||
{
|
||||
public const PERMISSIONS = [
|
||||
'warehouse_request_review' => 'Autorizar ou rejeitar requisições internas ao armazém do departamento, de forma independente',
|
||||
'warehouse_request_deliver' => 'Entregar material de requisições internas autorizadas (exige função de armazém)',
|
||||
'warehouse_request_prepare' => 'Preparar requisições próprias ao armazém com destino de utilização',
|
||||
'warehouse_request_read' => 'Consultar requisições ao armazém da empresa',
|
||||
'warehouse_availability_read' => 'Consultar disponibilidade e necessidades planeadas para requisições ao armazém',
|
||||
'inventory_lot_read' => 'Consultar lotes, validade e quarentena',
|
||||
'inventory_lot_prepare' => 'Preparar controlo por lotes e correcções de identificação',
|
||||
'inventory_lot_review' => 'Conferir activação e parâmetros do controlo por lotes',
|
||||
'inventory_lot_hold' => 'Colocar lotes em quarentena',
|
||||
'inventory_lot_release' => 'Conferir identificação e libertar lotes de forma independente',
|
||||
'inventory_adjust_review' => 'Conferir e aplicar ajustes físicos por lote de forma independente',
|
||||
'inventory_disposition_read' => 'Consultar devoluções a fornecedores e abates físicos',
|
||||
'inventory_disposition_prepare' => 'Preparar devoluções a fornecedores e abates físicos',
|
||||
'inventory_disposition_review' => 'Conferir devoluções e abates de forma independente',
|
||||
'inventory_reversal_read' => 'Consultar estornos integrais de stock e respectivas origens',
|
||||
'inventory_reversal_prepare' => 'Preparar estornos de stock ligados ao original',
|
||||
'inventory_reversal_review' => 'Conferir estornos de stock de forma independente',
|
||||
'supply_read' => 'Consultar fornecimentos e calendário de reposição',
|
||||
'supply_prepare' => 'Preparar acordos habituais e políticas de reposição',
|
||||
'supply_review' => 'Conferir e aprovar acordos e políticas de reposição',
|
||||
'supply_suggest_prepare' => 'Preparar e actualizar sugestões de reposição',
|
||||
'supply_suggest_review' => 'Conferir e decidir sugestões de reposição',
|
||||
'supply_suggest_convert' => 'Converter sugestões aprovadas em requisições próprias',
|
||||
'supply_history_prepare' => 'Preparar análise e cobertura do histórico de consumo',
|
||||
'supply_history_review' => 'Conferir o histórico de consumo de forma independente',
|
||||
'supply_reserve' => 'Reservar necessidades e conferir satisfação por saídas',
|
||||
'supply_delivery' => 'Registar confirmações e replaneamento de entregas',
|
||||
'supply_technical_prepare' => 'Preparar equivalências técnicas de artigos',
|
||||
'supply_technical_review' => 'Validar equivalências técnicas de forma independente',
|
||||
'import_read' => 'Consultar processos de importação',
|
||||
'import_prepare' => 'Preparar e acompanhar logística de importações',
|
||||
'import_customs' => 'Conferir documentação e libertação aduaneira',
|
||||
'requester' => 'Solicitar e acompanhar compras próprias',
|
||||
'department_head' => 'Supervisão e aprovação do departamento',
|
||||
'procurement' => 'Preparação e gestão operacional de compras',
|
||||
@@ -30,7 +62,7 @@ class OrganizationAccess
|
||||
}
|
||||
|
||||
/** @return list<string> */
|
||||
public function permissions(User $user): array
|
||||
public function permissions(User $user, ?string $context = null): array
|
||||
{
|
||||
if ($user->tenant_id === null) {
|
||||
return [];
|
||||
@@ -38,11 +70,25 @@ class OrganizationAccess
|
||||
if (! $this->active($user->tenant_id)) {
|
||||
return $user->purchasing_role === null || $user->purchasing_role === PurchasingRole::Configured ? [] : [$user->purchasing_role->value];
|
||||
}
|
||||
$contextKey = $context;
|
||||
if ($contextKey === null && app()->bound('request') && request()->hasSession() && WorkContext::area(request()->path()) !== null && app(WorkContext::class)->enforced($user)) {
|
||||
$contextKey = app(WorkContext::class)->active(request());
|
||||
if ($contextKey === null) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
$columns = ['p.permissions'];
|
||||
if (Schema::hasColumn('organization_profiles', 'work_contexts')) {
|
||||
$columns[] = 'p.work_contexts';
|
||||
}
|
||||
$rows = DB::table('organization_memberships as m')->join('organization_profiles as p', 'p.id', '=', 'm.profile_id')
|
||||
->where('m.tenant_id', $user->tenant_id)->where('p.tenant_id', $user->tenant_id)->where('m.user_id', $user->id)
|
||||
->where(fn ($q) => $q->whereNull('m.expires_at')->orWhere('m.expires_at', '>', now()))->get(['p.permissions']);
|
||||
->where(fn ($q) => $q->whereNull('m.expires_at')->orWhere('m.expires_at', '>', now()))->get($columns);
|
||||
$permissions = [];
|
||||
foreach ($rows as $row) {
|
||||
if ($contextKey !== null && ! in_array($contextKey, json_decode($row->work_contexts ?? '[]', true, 32, JSON_THROW_ON_ERROR), true)) {
|
||||
continue;
|
||||
}
|
||||
$permissions = [...$permissions, ...json_decode($row->permissions, true, 32, JSON_THROW_ON_ERROR)];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user