feat(secretary): implement scope separation for secretaries in clinics and personal practices
- Added `owner_type` and `clinic_id` fields to `DoctorSecretary` entity to distinguish between clinic and personal practice relationships. - Updated repository methods to be scope-aware, allowing for specific queries based on the context of the secretary's relationship (clinic or doctor). - Modified `SecretaryController` to handle secretary creation with appropriate scope based on the current user's role. - Enhanced `AuthController` to build contexts that reflect the scope of the secretary's access. - Updated `DashboardController` and `PatientController` to respect the new scope logic when retrieving data. - Created migration to update the database schema accordingly, dropping the old unique constraint and adding the new fields and constraints.
This commit is contained in:
@@ -649,15 +649,33 @@ class AuthController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
// منشی: همه روابط فعال
|
||||
// منشی: هر رابطه فعال با scope مجزا
|
||||
foreach ($this->secretaryRepo->findAllActiveBySecretary($user) as $rel) {
|
||||
$contexts[] = [
|
||||
'type' => 'doctor',
|
||||
'db_uuid' => $rel->getDoctor()->getUuid(),
|
||||
'name' => 'مطب ' . $rel->getDoctor()->getName(),
|
||||
'role' => 'secretary',
|
||||
'permissions' => $rel->getPermissions(),
|
||||
];
|
||||
if ($rel->getOwnerType() === \App\Secretary\Entity\DoctorSecretary::OWNER_CLINIC && $rel->getClinic() !== null) {
|
||||
// scope کلینیک — یک context به ازای هر کلینیک (نه هر دکتر)
|
||||
$clinicUuid = $rel->getClinic()->getUuid();
|
||||
$alreadyAdded = array_filter($contexts, fn($c) => $c['db_uuid'] === $clinicUuid && ($c['role'] ?? '') === 'secretary');
|
||||
if (empty($alreadyAdded)) {
|
||||
$contexts[] = [
|
||||
'type' => 'clinic',
|
||||
'db_uuid' => $clinicUuid,
|
||||
'name' => 'کلینیک ' . ($rel->getClinic()->getName() ?? ''),
|
||||
'role' => 'secretary',
|
||||
'scope' => 'clinic',
|
||||
'permissions' => $rel->getPermissions(),
|
||||
];
|
||||
}
|
||||
} else {
|
||||
// scope مطب شخصی
|
||||
$contexts[] = [
|
||||
'type' => 'doctor',
|
||||
'db_uuid' => $rel->getDoctor()->getUuid(),
|
||||
'name' => 'مطب ' . $rel->getDoctor()->getName(),
|
||||
'role' => 'secretary',
|
||||
'scope' => 'doctor',
|
||||
'permissions' => $rel->getPermissions(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $contexts;
|
||||
|
||||
Reference in New Issue
Block a user