feat: add per-doctor permissions management in clinics
- 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.
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
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 };
|
||||
}
|
||||
Reference in New Issue
Block a user