From 77b718c22cd06059c0852a7bdde2d7b1acda3e05 Mon Sep 17 00:00:00 2001 From: Pranav Date: Wed, 21 Aug 2024 11:36:26 +0530 Subject: [PATCH] fix: Remove user.permissions, resolve it from accounts (#9990) Remove the `user.permissions` field and resolve the permissions directly from the accounts array in the user. This change ensures that the cache or previous values from the last active account don't affect the permissions. In this PR: - Remove user.permissions usage, replace it with getUserPermissions method. - Remove json.permissions from user.json.jbuilder --- .../dashboard/components/layout/Sidebar.vue | 10 ++++++-- .../layout/sidebarComponents/Secondary.vue | 10 ++++++-- .../dashboard/components/policy.vue | 19 +++++++++++---- .../dashboard/helper/permissionsHelper.js | 9 ++++++++ .../dashboard/helper/routeHelpers.js | 15 ++++++------ .../helper/specs/permissionsHelper.spec.js | 23 +++++++++++++++++++ .../helper/specs/routeHelpers.spec.js | 8 ------- app/javascript/dashboard/routes/index.spec.js | 20 ++++++++++++---- app/views/api/v1/models/_user.json.jbuilder | 1 - .../devise/session_controller_spec.rb | 2 +- 10 files changed, 87 insertions(+), 30 deletions(-) diff --git a/app/javascript/dashboard/components/layout/Sidebar.vue b/app/javascript/dashboard/components/layout/Sidebar.vue index 1e1dfac25..9a2f5b028 100644 --- a/app/javascript/dashboard/components/layout/Sidebar.vue +++ b/app/javascript/dashboard/components/layout/Sidebar.vue @@ -8,7 +8,10 @@ import { useRoute, useRouter } from 'dashboard/composables/route'; import PrimarySidebar from './sidebarComponents/Primary.vue'; import SecondarySidebar from './sidebarComponents/Secondary.vue'; import { routesWithPermissions } from '../../routes'; -import { hasPermissions } from '../../helper/permissionsHelper'; +import { + getUserPermissions, + hasPermissions, +} from '../../helper/permissionsHelper'; export default { components: { @@ -113,7 +116,10 @@ export default { return getSidebarItems(this.accountId); }, primaryMenuItems() { - const userPermissions = this.currentUser.permissions; + const userPermissions = getUserPermissions( + this.currentUser, + this.accountId + ); const menuItems = this.sideMenuConfig.primaryMenu; return menuItems.filter(menuItem => { const isAvailableForTheUser = hasPermissions( diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue index 6de03af53..0f12b48c3 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue @@ -4,7 +4,10 @@ import SecondaryNavItem from './SecondaryNavItem.vue'; import AccountContext from './AccountContext.vue'; import { mapGetters } from 'vuex'; import { FEATURE_FLAGS } from '../../../featureFlags'; -import { hasPermissions } from '../../../helper/permissionsHelper'; +import { + getUserPermissions, + hasPermissions, +} from '../../../helper/permissionsHelper'; import { routesWithPermissions } from '../../../routes'; export default { @@ -59,7 +62,10 @@ export default { accessibleMenuItems() { const menuItemsFilteredByPermissions = this.menuConfig.menuItems.filter( menuItem => { - const { permissions: userPermissions = [] } = this.currentUser; + const userPermissions = getUserPermissions( + this.currentUser, + this.accountId + ); return hasPermissions( routesWithPermissions[menuItem.toStateName], userPermissions diff --git a/app/javascript/dashboard/components/policy.vue b/app/javascript/dashboard/components/policy.vue index f888de5a2..e9ad2de1f 100644 --- a/app/javascript/dashboard/components/policy.vue +++ b/app/javascript/dashboard/components/policy.vue @@ -1,7 +1,11 @@ +