From e9f4b2a437009baddce3b2642c6983b913e92e93 Mon Sep 17 00:00:00 2001 From: Pavel Zavora Date: Tue, 31 May 2022 15:15:44 +0200 Subject: [PATCH] feat(ui): reuse permission logic --- ui/src/admin/containers/influxdb/UserPage.tsx | 10 ++--- .../{userPermissions.ts => permissions.ts} | 30 ++++++------- ...ermissions.test.ts => permissions.test.ts} | 44 ++++++++----------- 3 files changed, 39 insertions(+), 45 deletions(-) rename ui/src/admin/containers/influxdb/util/{userPermissions.ts => permissions.ts} (78%) rename ui/test/admin/containers/influxdb/util/{userPermissions.test.ts => permissions.test.ts} (80%) diff --git a/ui/src/admin/containers/influxdb/UserPage.tsx b/ui/src/admin/containers/influxdb/UserPage.tsx index b5181c4e1..72f0afd2b 100644 --- a/ui/src/admin/containers/influxdb/UserPage.tsx +++ b/ui/src/admin/containers/influxdb/UserPage.tsx @@ -20,10 +20,10 @@ import {useEffect} from 'react' import {useCallback} from 'react' import {PERMISSIONS} from 'src/shared/constants' import { - computeUserPermissions, - computeUserPermissionsChange, + computePermissions, + computePermissionsChange, toUserPermissions, -} from './util/userPermissions' +} from './util/permissions' const FAKE_USER: User = { name: '', @@ -150,7 +150,7 @@ const UserPage = ({ () => [ serverPermissions.find(x => x.scope === 'database')?.allowed || [], serverPermissions.find(x => x.scope === 'all')?.allowed || [], - computeUserPermissions(user, isEnterprise), + computePermissions(user, isEnterprise), ], [serverPermissions, user, isEnterprise] ) @@ -165,7 +165,7 @@ const UserPage = ({ const db = (e.target as HTMLElement).dataset.db const perm = (e.target as HTMLElement).dataset.perm setChangedPermissions( - computeUserPermissionsChange( + computePermissionsChange( db, perm, userDBPermissions, diff --git a/ui/src/admin/containers/influxdb/util/userPermissions.ts b/ui/src/admin/containers/influxdb/util/permissions.ts similarity index 78% rename from ui/src/admin/containers/influxdb/util/userPermissions.ts rename to ui/src/admin/containers/influxdb/util/permissions.ts index 3c86028b4..e5cd057bc 100644 --- a/ui/src/admin/containers/influxdb/util/userPermissions.ts +++ b/ui/src/admin/containers/influxdb/util/permissions.ts @@ -1,17 +1,17 @@ -import {User, UserPermission} from 'src/types/influxAdmin' +import {User, UserPermission, UserRole} from 'src/types/influxAdmin' /** Record with databases as keys and values being a record of granted permissions or permission changes */ -export type UserDBPermissions = Record> +export type PerDBPermissions = Record> /** - * ComputeUserPermissions creates a record of user's database permissions. - * @param user infludb user + * ComputePermissions creates a record of permissions per database. + * @param entity infludb user or role * @param isEnterprise enteprise InfluxDB flag means that all-scoped permissions are mapped to an extra '' database. */ -export function computeUserPermissions( - user: User, +export function computePermissions( + user: User | UserRole, isEnterprise: boolean -): UserDBPermissions { +): PerDBPermissions { return user.permissions.reduce((acc, perm) => { if (!isEnterprise && perm.scope !== 'database') { return acc // do not include all permissions in OSS, they have separate administration @@ -24,16 +24,16 @@ export function computeUserPermissions( } /** - * ComputeUserPermissionsChange computes changes in user permissions - * for a specific db and permission, having original user permission + * ComputePermissionsChange computes changes in permissions + * after toggling a specific db and permission, having original user permission * and a set of already performed changes. */ -export function computeUserPermissionsChange( +export function computePermissionsChange( db: string, perm: string, - userPermissions: UserDBPermissions, - changedPermissions: UserDBPermissions -): UserDBPermissions { + userPermissions: PerDBPermissions, + changedPermissions: PerDBPermissions +): PerDBPermissions { const origState = userPermissions[db]?.[perm] const {[db]: changedDB, ...otherDBs} = changedPermissions if (changedDB === undefined) { @@ -66,8 +66,8 @@ export function computeUserPermissionsChange( * appended to supplied user permissions. */ export function toUserPermissions( - userPermissions: UserDBPermissions, - changedPermissions: UserDBPermissions, + userPermissions: PerDBPermissions, + changedPermissions: PerDBPermissions, appendAfter: UserPermission[] = [] ): UserPermission[] { const newUserPermisssions = {...userPermissions} diff --git a/ui/test/admin/containers/influxdb/util/userPermissions.test.ts b/ui/test/admin/containers/influxdb/util/permissions.test.ts similarity index 80% rename from ui/test/admin/containers/influxdb/util/userPermissions.test.ts rename to ui/test/admin/containers/influxdb/util/permissions.test.ts index f58110727..f8cd89080 100644 --- a/ui/test/admin/containers/influxdb/util/userPermissions.test.ts +++ b/ui/test/admin/containers/influxdb/util/permissions.test.ts @@ -1,19 +1,19 @@ import { - computeUserPermissions, - computeUserPermissionsChange, + computePermissions, + computePermissionsChange, toUserPermissions, -} from 'src/admin/containers/influxdb/util/userPermissions' +} from 'src/admin/containers/influxdb/util/permissions' import {User, UserPermission} from 'src/types/influxAdmin' const redundantUserProperties: Pick = { roles: [], links: {self: ''}, } -describe('admin/containers/influxdb/util/userPermissions', () => { +describe('admin/containers/influxdb/util/permissions', () => { describe('computeUserDBPermissions', () => { it('computes no permissions', () => { ;[true, false].forEach(isEnterprise => expect( - computeUserPermissions( + computePermissions( { name: 'a', permissions: [], @@ -26,7 +26,7 @@ describe('admin/containers/influxdb/util/userPermissions', () => { }) it('includes only database permissions for OSS', () => { expect( - computeUserPermissions( + computePermissions( { name: 'a', permissions: [ @@ -42,7 +42,7 @@ describe('admin/containers/influxdb/util/userPermissions', () => { }) it('includes extra database for Enterprise all-scoped permissions', () => { expect( - computeUserPermissions( + computePermissions( { name: 'a', permissions: [ @@ -60,66 +60,60 @@ describe('admin/containers/influxdb/util/userPermissions', () => { describe('computeUserPermissionsChange', () => { const userPerms = {db1: {Write: true}} it('toggles new db permission', () => { - expect( - computeUserPermissionsChange('db2', 'Read', userPerms, {}) - ).toEqual({ + expect(computePermissionsChange('db2', 'Read', userPerms, {})).toEqual({ db2: {Read: true}, }) expect( - computeUserPermissionsChange('db2', 'Read', userPerms, { + computePermissionsChange('db2', 'Read', userPerms, { db2: {Read: true}, }) ).toEqual({}) expect( - computeUserPermissionsChange('db2', 'Read', userPerms, {db3: {A: true}}) + computePermissionsChange('db2', 'Read', userPerms, {db3: {A: true}}) ).toEqual({ db2: {Read: true}, db3: {A: true}, }) expect( - computeUserPermissionsChange('db2', 'Read', userPerms, { + computePermissionsChange('db2', 'Read', userPerms, { db2: {Read: true}, db3: {A: true}, }) ).toEqual({db3: {A: true}}) }) it('toggles existing db new permission', () => { - expect( - computeUserPermissionsChange('db1', 'Read', userPerms, {}) - ).toEqual({ + expect(computePermissionsChange('db1', 'Read', userPerms, {})).toEqual({ db1: {Read: true}, }) expect( - computeUserPermissionsChange('db1', 'Read', userPerms, { + computePermissionsChange('db1', 'Read', userPerms, { db1: {Read: true}, }) ).toEqual({}) expect( - computeUserPermissionsChange('db1', 'Read', userPerms, {db3: {A: true}}) + computePermissionsChange('db1', 'Read', userPerms, {db3: {A: true}}) ).toEqual({ db1: {Read: true}, db3: {A: true}, }) expect( - computeUserPermissionsChange('db1', 'Read', userPerms, { + computePermissionsChange('db1', 'Read', userPerms, { db1: {Read: true}, db3: {A: true}, }) ).toEqual({db3: {A: true}}) }) it('toggles existing db existing permission', () => { - expect( - computeUserPermissionsChange('db1', 'Write', userPerms, {}) - ).toEqual({ + expect(computePermissionsChange('db1', 'Write', userPerms, {})).toEqual({ db1: {Write: false}, }) expect( - computeUserPermissionsChange('db1', 'Write', userPerms, { + computePermissionsChange('db1', 'Write', userPerms, { db1: {Write: false}, }) ).toEqual({}) expect( - computeUserPermissionsChange('db1', 'Write', userPerms, { + computePermissionsChange('db1', 'Write', userPerms, { db3: {A: true}, }) ).toEqual({ @@ -127,7 +121,7 @@ describe('admin/containers/influxdb/util/userPermissions', () => { db3: {A: true}, }) expect( - computeUserPermissionsChange('db1', 'Write', userPerms, { + computePermissionsChange('db1', 'Write', userPerms, { db1: {Write: false}, db3: {A: true}, })