Browse Source

fix(gui-v2): permission type not allowing wildcard

# What's changed?

* rename `RolePermissions` to `Permission`
* allow wildcard permission for creator and owner roles
pull/2940/head
braks 2 years ago
parent
commit
222539efee
  1. 13
      packages/nc-gui-v2/composables/useUIPermission/index.ts
  2. 7
      packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts

13
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 rolePermissions from './rolePermissions'
import { useState } from '#app' import { useState } from '#app'
import { USER_PROJECT_ROLES } from '~/lib/constants' import { USER_PROJECT_ROLES } from '~/lib/constants'
@ -7,7 +7,7 @@ export function useUIPermission() {
const { $state } = useNuxtApp() const { $state } = useNuxtApp()
const projectRoles = useState<Record<string, boolean>>(USER_PROJECT_ROLES, () => ({})) const projectRoles = useState<Record<string, boolean>>(USER_PROJECT_ROLES, () => ({}))
const isUIAllowed = (permission: RolePermissions, _skipPreviewAs = false) => { const isUIAllowed = (permission: Permission, _skipPreviewAs = false) => {
const user = $state.user const user = $state.user
let userRoles = user?.value?.roles || {} let userRoles = user?.value?.roles || {}
@ -32,14 +32,13 @@ export function useUIPermission() {
// }; // };
// } // }
return Object.entries(roles).some(([role, hasRole]) => { return Object.entries<boolean>(roles).some(([role, hasRole]) => {
const rolePermission = rolePermissions[role as keyof typeof rolePermissions] const rolePermission = rolePermissions[role as keyof typeof rolePermissions] as Permission
return ( return (
hasRole && hasRole &&
(rolePermission === '*' || typeof rolePermission === 'object' (rolePermission === '*' ||
? rolePermission[permission as keyof typeof rolePermission] === true (typeof rolePermission === 'object' && rolePermission[permission as keyof typeof rolePermission]))
: false)
) )
}) })
} }

7
packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts

@ -40,9 +40,10 @@ export default rolePermissions
type GetKeys<T> = T extends Record<string, any> ? keyof T : never type GetKeys<T> = T extends Record<string, any> ? keyof T : never
export type RolePermissions<T extends typeof rolePermissions = typeof rolePermissions, K extends keyof T = keyof T> = export type Permission<T extends typeof rolePermissions = typeof rolePermissions, K extends keyof T = keyof T> = K extends
| T[K] extends string | 'creator'
| 'owner'
? T[K] ? T[K]
: never & T[K] extends Record<string, any> : never | T[K] extends Record<string, any>
? GetKeys<T[K]> ? GetKeys<T[K]>
: never : never

Loading…
Cancel
Save