From 222539efeeafa7090b9e5cc928d1d5a3c431372e Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 1 Aug 2022 19:49:30 +0200 Subject: [PATCH 1/3] fix(gui-v2): permission type not allowing wildcard # What's changed? * rename `RolePermissions` to `Permission` * allow wildcard permission for creator and owner roles --- .../nc-gui-v2/composables/useUIPermission/index.ts | 13 ++++++------- .../composables/useUIPermission/rolePermissions.ts | 7 ++++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/nc-gui-v2/composables/useUIPermission/index.ts b/packages/nc-gui-v2/composables/useUIPermission/index.ts index f2bdd4d8a6..861dbfb756 100644 --- a/packages/nc-gui-v2/composables/useUIPermission/index.ts +++ b/packages/nc-gui-v2/composables/useUIPermission/index.ts @@ -1,4 +1,4 @@ -import type { RolePermissions } from './rolePermissions' +import type { Permission } from './rolePermissions' import rolePermissions from './rolePermissions' import { useState } from '#app' import { USER_PROJECT_ROLES } from '~/lib/constants' @@ -7,7 +7,7 @@ export function useUIPermission() { const { $state } = useNuxtApp() const projectRoles = useState>(USER_PROJECT_ROLES, () => ({})) - const isUIAllowed = (permission: RolePermissions, _skipPreviewAs = false) => { + const isUIAllowed = (permission: Permission, _skipPreviewAs = false) => { const user = $state.user let userRoles = user?.value?.roles || {} @@ -32,14 +32,13 @@ export function useUIPermission() { // }; // } - return Object.entries(roles).some(([role, hasRole]) => { - const rolePermission = rolePermissions[role as keyof typeof rolePermissions] + return Object.entries(roles).some(([role, hasRole]) => { + const rolePermission = rolePermissions[role as keyof typeof rolePermissions] as Permission return ( hasRole && - (rolePermission === '*' || typeof rolePermission === 'object' - ? rolePermission[permission as keyof typeof rolePermission] === true - : false) + (rolePermission === '*' || + (typeof rolePermission === 'object' && rolePermission[permission as keyof typeof rolePermission])) ) }) } diff --git a/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts b/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts index e48f32c8ea..9fff66f69b 100644 --- a/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts +++ b/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts @@ -40,9 +40,10 @@ export default rolePermissions type GetKeys = T extends Record ? keyof T : never -export type RolePermissions = - | T[K] extends string +export type Permission = K extends + | 'creator' + | 'owner' ? T[K] - : never & T[K] extends Record + : never | T[K] extends Record ? GetKeys : never From f9d8389cecd6ba10b32c7376aaa1b6ab3fc212be Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 1 Aug 2022 22:16:30 +0200 Subject: [PATCH 2/3] chore(gui-v2): remove unnecessary typecast --- packages/nc-gui-v2/composables/useUIPermission/index.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/nc-gui-v2/composables/useUIPermission/index.ts b/packages/nc-gui-v2/composables/useUIPermission/index.ts index 861dbfb756..304cf6e8c1 100644 --- a/packages/nc-gui-v2/composables/useUIPermission/index.ts +++ b/packages/nc-gui-v2/composables/useUIPermission/index.ts @@ -35,11 +35,7 @@ export function useUIPermission() { return Object.entries(roles).some(([role, hasRole]) => { const rolePermission = rolePermissions[role as keyof typeof rolePermissions] as Permission - return ( - hasRole && - (rolePermission === '*' || - (typeof rolePermission === 'object' && rolePermission[permission as keyof typeof rolePermission])) - ) + return hasRole && (rolePermission === '*' || (typeof rolePermission === 'object' && rolePermission[permission])) }) } From 9820ed6a206e86e633105a0c2bee8a6dab06c6ad Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Mon, 1 Aug 2022 22:21:35 +0200 Subject: [PATCH 3/3] chore(gui-v2): properly type rolePermission and remove unnecessary check --- packages/nc-gui-v2/composables/useUIPermission/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nc-gui-v2/composables/useUIPermission/index.ts b/packages/nc-gui-v2/composables/useUIPermission/index.ts index 304cf6e8c1..5fd667e3dc 100644 --- a/packages/nc-gui-v2/composables/useUIPermission/index.ts +++ b/packages/nc-gui-v2/composables/useUIPermission/index.ts @@ -33,9 +33,9 @@ export function useUIPermission() { // } return Object.entries(roles).some(([role, hasRole]) => { - const rolePermission = rolePermissions[role as keyof typeof rolePermissions] as Permission + const rolePermission = rolePermissions[role as keyof typeof rolePermissions] as '*' | Record - return hasRole && (rolePermission === '*' || (typeof rolePermission === 'object' && rolePermission[permission])) + return hasRole && (rolePermission === '*' || rolePermission[permission]) }) }