- Implement DoctorPermissionsModal for managing doctor permissions in clinics. - Create usePermissions hook to handle user permissions context. - Add migration for clinic_doctor_permissions table with default permissions. - Develop ClinicDoctorPermissionController for handling permissions API. - Create ClinicDoctorPermission entity to manage permissions data. - Implement ClinicDoctorPermissionRepository for database interactions. - Add ClinicDoctorPermissionChecker for permission validation logic. - Write tests for clinic doctor permissions functionality.
30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import { useCallback } from 'react';
|
|
import { useAuthStore } from '../stores/authStore';
|
|
|
|
/**
|
|
* دسترسی کاربر در context فعال.
|
|
*
|
|
* نبودِ فیلد permissions یعنی «محیط شخصی، محدودیتی نیست» — نه «هیچ دسترسی».
|
|
* فقط پزشکِ عضو کلینیک و منشی، context دارای مجوز میگیرند.
|
|
*/
|
|
export function usePermissions() {
|
|
const context = useAuthStore((s) => s.context);
|
|
const primaryRole = useAuthStore((s) => s.primaryRole);
|
|
|
|
const can = useCallback(
|
|
(resource: string, action: string): boolean => {
|
|
if (primaryRole === 'admin') return true;
|
|
|
|
// مجوز per-context حساب میشود نه per-role: کاربری که مالک یک کلینیک است
|
|
// ممکن است در کلینیک دیگری فقط عضو باشد.
|
|
const perms = context?.permissions as { resources?: Record<string, Record<string, boolean>> } | undefined | null;
|
|
if (!perms?.resources) return true;
|
|
|
|
return Boolean(perms.resources[resource]?.[action]);
|
|
},
|
|
[context, primaryRole],
|
|
);
|
|
|
|
return { can };
|
|
}
|