diff --git a/apps/web/src/components/DataAccessEditor.vue b/apps/web/src/components/DataAccessEditor.vue
index 58b0bc6..d5f2208 100644
--- a/apps/web/src/components/DataAccessEditor.vue
+++ b/apps/web/src/components/DataAccessEditor.vue
@@ -277,19 +277,28 @@ function addCustomSource(index: number) {
- قوانین با هم «یا» میشوند. داخل هر قانون، گزینههای پرشده با هم «و» هستند.
+ هر قانون یک راه جدا برای دیدن داده است. اگر چند قانون بگذارید، کافی است
+ یکی از آنها برقرار باشد تا رکورد دیده شود.
+ داخل یک قانون، گزینههایی که تیک میزنید باید
+ همه با هم برقرار باشند.
+ مثال: «پروندههای خودم» بهعنوان قانون ۱ و «گروه VIP» بهعنوان قانون ۲ → هم مال خودش را میبیند، هم VIP را.
diff --git a/apps/web/src/components/DataAccessPolicyPanel.vue b/apps/web/src/components/DataAccessPolicyPanel.vue index 4d702c8..92fb2b1 100644 --- a/apps/web/src/components/DataAccessPolicyPanel.vue +++ b/apps/web/src/components/DataAccessPolicyPanel.vue @@ -10,7 +10,6 @@ import { DATA_ACCESS_SECTION_LABELS, DATA_ACCESS_SECTIONS, emptySectionDataAccess, - parseDataAccessPolicy, } from '@mento/shared'; import { api } from '@/lib/api'; import { useCustomerGroups } from '@/lib/customer-groups'; @@ -57,15 +56,21 @@ watch( { immediate: true }, ); -const policy = computed(() => parseDataAccessPolicy(props.modelValue)); - +/** بدون parse سختگیرانه تا قانون خالیِ در حال ویرایش پاک نشود */ function sectionValue(key: DataAccessSection): SectionDataAccess { - return policy.value[key] ?? emptySectionDataAccess(); + const raw = props.modelValue?.[key]; + if (raw && typeof raw === 'object') { + return { + mode: raw.mode === 'rules' ? 'rules' : 'all', + rules: Array.isArray(raw.rules) ? raw.rules.map((r) => ({ ...r })) : [], + }; + } + return emptySectionDataAccess(); } function setSection(key: DataAccessSection, next: SectionDataAccess) { emit('update:modelValue', { - ...policy.value, + ...props.modelValue, [key]: next, }); }