fix: hide role permissions for modules disabled in super admin
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user