radfusion/app/Services/ACL/WorklistGuard.php

87 lines
2.5 KiB
PHP

<?php
namespace App\Services\ACL;
use App\Domain\ACL\Permission;
use App\Models\Study;
use App\Models\User;
use Illuminate\Support\Collection;
final readonly class WorklistGuard
{
public static function worklistColumns(User|int|null $usr = null): Collection
{
$user = me($usr);
$columns = collect([
WorklistColumn::Priority,
WorklistColumn::ReportStatus,
WorklistColumn::ActionButtons,
// WorklistColumn::AssignedPhysician,
WorklistColumn::PatientId,
WorklistColumn::PatientName,
WorklistColumn::PatientSexAge,
WorklistColumn::StudyDate,
WorklistColumn::ReceiveDate,
WorklistColumn::Modality,
WorklistColumn::StudyDescription,
WorklistColumn::ReadingPhysician,
WorklistColumn::ReportDate,
// WorklistColumn::History,
WorklistColumn::ReportButtons,
WorklistColumn::ViewerButtons,
WorklistColumn::Series,
]);
if ($user->isRadiologist()) {
$columns = $columns->reject(function ($col) {
return $col == WorklistColumn::AssignedPhysician || $col == WorklistColumn::ReadingPhysician;
});
} else {
$columns = $columns->reject(function ($col) {
return $col == WorklistColumn::ReportDate;
});
}
if ($user->isAdmin()) {
$columns->push(WorklistColumn::Organization);
$columns->push(WorklistColumn::Department);
$columns->push(WorklistColumn::DicomServer);
}
return $columns;
}
public static function worklistButtons(Study $study, User|int|null $usr = null): Collection
{
$user = me($usr);
if ($user->isRadiologist()) {
return collect([
WorklistButton::StudyMetadata,
WorklistButton::Notes,
// WorklistButton::Audit,
WorklistButton::Bookmark,
]);
}
$buttons = collect([
WorklistButton::StudyMetadata,
WorklistButton::History,
WorklistButton::Notes,
]);
if ($study->canAssignRad()) {
$buttons->push(WorklistButton::Assign);
}
if (may(Permission::AuditLogView)) {
$buttons->push(WorklistButton::Audit);
}
if (may(Permission::BookmarkCreate)) {
$buttons->push(WorklistButton::Bookmark);
}
return $buttons;
}
}