Browse Source

feat(gui): show app store only for super admin user

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/3796/head
Pranav C 2 years ago
parent
commit
ace5f0a06d
  1. 56
      packages/nc-gui/components/dashboard/settings/Modal.vue
  2. 9
      packages/nc-gui/composables/useUIPermission/index.ts
  3. 54
      packages/nc-gui/composables/useUIPermission/rolePermissions.ts

56
packages/nc-gui/components/dashboard/settings/Modal.vue

@ -56,41 +56,43 @@ const tabsInfo: TabGroup = {
subTabs: { subTabs: {
...(isUIAllowed('userMgmtTab') ...(isUIAllowed('userMgmtTab')
? { ? {
usersManagement: { usersManagement: {
// Users Management // Users Management
title: t('title.userMgmt'), title: t('title.userMgmt'),
body: UserManagement, body: UserManagement,
}, },
} }
: {}), : {}),
...(isUIAllowed('apiTokenTab') ...(isUIAllowed('apiTokenTab')
? { ? {
apiTokenManagement: { apiTokenManagement: {
// API Tokens Management // API Tokens Management
title: t('title.apiTokenMgmt'), title: t('title.apiTokenMgmt'),
body: ApiTokenManagement, body: ApiTokenManagement,
}, },
} }
: {}), : {}),
}, },
onClick: () => { onClick: () => {
$e('c:settings:team-auth') $e('c:settings:team-auth')
}, },
}, }, ...(isUIAllowed('appStore')
appStore: { ? {
// App Store appStore: {
title: t('title.appStore'), // App Store
icon: StoreFrontOutline, title: t('title.appStore'),
subTabs: { icon: StoreFrontOutline,
new: { subTabs: {
title: 'Apps', new: {
body: AppStore, title: 'Apps',
}, body: AppStore,
}, },
onClick: () => { },
$e('c:settings:appstore') onClick: () => {
}, $e('c:settings:appstore')
}, },
}
: {}),
projMetaData: { projMetaData: {
// Project Metadata // Project Metadata
title: t('title.projMeta'), title: t('title.projMeta'),

9
packages/nc-gui/composables/useUIPermission/index.ts

@ -11,6 +11,15 @@ const hasPermission = (role: Role | ProjectRole, hasRole: boolean, permission: P
if (isString(rolePermission) && rolePermission === '*') return true if (isString(rolePermission) && rolePermission === '*') return true
// todo: type correction
if('include' in rolePermission[permission as keyof typeof rolePermission]){
return rolePermission[permission as keyof typeof rolePermission].include[permission]
}
if('exclude' in rolePermission[permission as keyof typeof rolePermission]){
return !rolePermission[permission as keyof typeof rolePermission].exclude[permission]
}
return rolePermission[permission as keyof typeof rolePermission] return rolePermission[permission as keyof typeof rolePermission]
} }

54
packages/nc-gui/composables/useUIPermission/rolePermissions.ts

@ -8,43 +8,55 @@ const rolePermissions = {
[Role.Admin]: {}, [Role.Admin]: {},
[Role.Guest]: {}, [Role.Guest]: {},
[Role.User]: { [Role.User]: {
projectCreate: true, include: {
projectActions: true, projectCreate: true,
projectSettings: true, projectActions: true,
projectSettings: true,
}
}, },
// Project role permissions // Project role permissions
[ProjectRole.Creator]: '*', [ProjectRole.Creator]: {
[ProjectRole.Owner]: '*', exclude: ["appStore"]
},
[ProjectRole.Owner]: {
exclude: ["appStore"]
},
[ProjectRole.Editor]: { [ProjectRole.Editor]: {
smartSheet: true, include: {
xcDatatableEditable: true, smartSheet: true,
column: true, xcDatatableEditable: true,
tableAttachment: true, column: true,
tableRowUpdate: true, tableAttachment: true,
dataInsert: true, tableRowUpdate: true,
rowComments: true, dataInsert: true,
gridViewOptions: true, rowComments: true,
sortSync: true, gridViewOptions: true,
fieldsSync: true, sortSync: true,
gridColUpdate: true, fieldsSync: true,
filterSync: true, gridColUpdate: true,
csvImport: true, filterSync: true,
apiDocs: true, csvImport: true,
projectSettings: true, apiDocs: true,
newUser: false, projectSettings: true,
newUser: false,
}
}, },
[ProjectRole.Commenter]: { [ProjectRole.Commenter]: {
include: {
smartSheet: true, smartSheet: true,
column: true, column: true,
rowComments: true, rowComments: true,
projectSettings: true, projectSettings: true,
}, },
},
[ProjectRole.Viewer]: { [ProjectRole.Viewer]: {
include: {
smartSheet: true, smartSheet: true,
column: true, column: true,
projectSettings: true, projectSettings: true,
}, },
},
} as const } as const
type RolePermissions = Omit<typeof rolePermissions, 'creator' | 'owner' | 'guest' | 'admin'> type RolePermissions = Omit<typeof rolePermissions, 'creator' | 'owner' | 'guest' | 'admin'>

Loading…
Cancel
Save