fix: hide role permissions for modules disabled in super admin

This commit is contained in:
2026-10-19 12:20:52 +03:30
parent e6f9876177
commit 3863c5e7d1
+37 -6
View File
@@ -13,6 +13,7 @@ import {
ROLE_PERMISSION_ITEMS,
type InviteUserRequest,
type OrganizationDto,
type OrgModuleKey,
type OrgRoleDto,
type OrgUserDto,
type RolePermissionKey,
@@ -48,12 +49,40 @@ const auth = useAuthStore();
const route = useRoute();
const router = useRouter();
/** مجوزی که ماژولش در سوپرادمین خاموش است در نقش‌ها نشان داده نمی‌شود. */
const PERMISSION_MODULES: Partial<Record<RolePermissionKey, OrgModuleKey[]>> = {
customers: ['customers'],
sales: ['pipeline'],
billing: ['invoices', 'quotes'],
products: ['products'],
activities: ['activities'],
notes: ['notes'],
reports: ['reports'],
audit: ['audit_logs'],
conversations: ['conversations'],
conversations_groups: ['conversations'],
treasury: ['treasury'],
treasury_payroll: ['treasury'],
behavior: ['behavior'],
};
const loading = ref(false);
const error = ref('');
const ok = ref('');
const users = ref<OrgUserDto[]>([]);
const roles = ref<OrgRoleDto[]>([]);
const org = ref<OrganizationDto | null>(null);
const visibleRolePermissions = computed(() => {
const enabled = org.value?.enabledModules ?? auth.user?.enabledModules;
if (!enabled) return ROLE_PERMISSION_ITEMS;
return ROLE_PERMISSION_ITEMS.filter((item) => {
const modules = PERMISSION_MODULES[item.key];
if (!modules?.length) return true;
return modules.some((module) => enabled.includes(module));
});
});
const orgName = ref('');
const businessField = ref('');
const orgSaving = ref(false);
@@ -119,7 +148,9 @@ const accessFocusRole = computed(
);
function permCountLabel(role: OrgRoleDto) {
return `${toFaDigits(role.permissions.length)} از ${toFaDigits(ROLE_PERMISSION_ITEMS.length)}`;
const visible = visibleRolePermissions.value;
const owned = visible.filter((item) => role.permissions.includes(item.key)).length;
return `${toFaDigits(owned)} از ${toFaDigits(visible.length)}`;
}
const stats = computed(() => {
@@ -487,7 +518,7 @@ function openCreateRole(parentId?: string | null) {
roleFormParentId.value = parent?.id ?? '';
roleFormPerms.value = parent
? [...parent.permissions]
: ROLE_PERMISSION_ITEMS.map((p) => p.key);
: visibleRolePermissions.value.map((p) => p.key);
roleFormOpen.value = true;
}
@@ -725,7 +756,7 @@ onUnmounted(() => {
</button>
</div>
<ul v-if="accessFocusRole" class="access-list">
<li v-for="perm in ROLE_PERMISSION_ITEMS" :key="perm.key">
<li v-for="perm in visibleRolePermissions" :key="perm.key">
<label class="access-row">
<span>{{ perm.label }}</span>
<span class="check">
@@ -750,7 +781,7 @@ onUnmounted(() => {
</tr>
</thead>
<tbody>
<tr v-for="perm in ROLE_PERMISSION_ITEMS" :key="perm.key">
<tr v-for="perm in visibleRolePermissions" :key="perm.key">
<th>{{ perm.label }}</th>
<td v-for="role in roles" :key="role.id + perm.key">
<label class="check">
@@ -833,7 +864,7 @@ onUnmounted(() => {
<section class="panel-block">
<h4>مجوزهای دسترسی</h4>
<ul class="perms">
<li v-for="perm in ROLE_PERMISSION_ITEMS" :key="perm.key">
<li v-for="perm in visibleRolePermissions" :key="perm.key">
<span
class="perm-check"
:class="{ on: selectedRole.permissions.includes(perm.key) }"
@@ -1185,7 +1216,7 @@ onUnmounted(() => {
</label>
<fieldset class="perm-set">
<legend>مجوزهای دسترسی</legend>
<label v-for="perm in ROLE_PERMISSION_ITEMS" :key="perm.key" class="perm-row">
<label v-for="perm in visibleRolePermissions" :key="perm.key" class="perm-row">
<input type="checkbox" :checked="permOn(perm.key)" @change="toggleFormPerm(perm.key)" />
{{ perm.label }}
</label>