From 89c2fb41ddcf93092c09af9aaab42cf472d8e94f Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 2 Apr 2023 10:35:22 +0200 Subject: [PATCH] can read all folders if admin or superadmin + refresh user in background --- frontend/src/lib/components/Path.svelte | 9 +++- frontend/src/lib/stores.ts | 16 ++++++- frontend/src/lib/user.ts | 60 ++++++++++++------------- 3 files changed, 51 insertions(+), 34 deletions(-) diff --git a/frontend/src/lib/components/Path.svelte b/frontend/src/lib/components/Path.svelte index 03744d7c03..1ca168f6e2 100644 --- a/frontend/src/lib/components/Path.svelte +++ b/frontend/src/lib/components/Path.svelte @@ -29,7 +29,6 @@ import { random_adj } from './random_positive_adjetive' import Badge from './common/badge/Badge.svelte' import { writable } from 'svelte/store' - import { canWrite } from '$lib/utils' type PathKind = 'resource' | 'script' | 'variable' | 'flow' | 'schedule' | 'app' let meta: Meta | undefined = undefined @@ -121,7 +120,13 @@ }) ) .filter((x) => x != initialFolder) - .map((x) => ({ name: x, write: $userStore?.folders?.includes(x) == true })) + .map((x) => ({ + name: x, + write: + ($userStore?.folders?.includes(x) == true ?? false) || + ($userStore?.is_admin ?? false) || + ($userStore?.is_super_admin ?? false) + })) ) } diff --git a/frontend/src/lib/stores.ts b/frontend/src/lib/stores.ts index 73ce0955b1..bb3db83321 100644 --- a/frontend/src/lib/stores.ts +++ b/frontend/src/lib/stores.ts @@ -1,5 +1,5 @@ import { browser } from '$app/environment' -import { derived, type Readable, writable } from 'svelte/store' +import { derived, type Readable, writable, get } from 'svelte/store' import type { UserWorkspaceList } from '$lib/gen/models/UserWorkspaceList.js' import { getUserExt } from './user' import { WorkspaceService, type TokenResponse } from './gen' @@ -80,6 +80,20 @@ if (browser) { userStore.set(undefined) } }) + + setInterval(async () => { + try { + const workspace = get(workspaceStore) + const user = get(userStore) + + if (workspace && user && !user.is_super_admin && !user.is_admin) { + userStore.set(await getUserExt(workspace)) + console.log('refreshed user') + } + } catch (e) { + console.error('Could not refresh user', e) + } + }, 30000) } export function switchWorkspace(workspace: string | undefined) { diff --git a/frontend/src/lib/user.ts b/frontend/src/lib/user.ts index 3d1502e8b4..a667b164a9 100644 --- a/frontend/src/lib/user.ts +++ b/frontend/src/lib/user.ts @@ -1,39 +1,37 @@ -import { get } from "svelte/store"; -import { type User, UserService } from "$lib/gen"; -import { superadmin, type UserExt } from "./stores.js"; -import { goto } from "$app/navigation"; +import { get } from 'svelte/store' +import { type User, UserService } from '$lib/gen' +import { superadmin, type UserExt } from './stores.js' +import { goto } from '$app/navigation' export async function refreshSuperadmin(): Promise { - if (get(superadmin) == undefined) { - try { - const me = await UserService.globalWhoami(); - if (me.super_admin) { - superadmin.set(me.email); - } else { - superadmin.set(false); - } - } catch { - superadmin.set(false); - goto("/user/logout"); - } - } + if (get(superadmin) == undefined) { + try { + const me = await UserService.globalWhoami() + if (me.super_admin) { + superadmin.set(me.email) + } else { + superadmin.set(false) + } + } catch { + superadmin.set(false) + goto('/user/logout') + } + } } -export async function getUserExt( - workspace: string, -): Promise { - try { - const user = await UserService.whoami({ workspace }); - return mapUserToUserExt(user); - } catch (error) { - return undefined; - } +export async function getUserExt(workspace: string): Promise { + try { + const user = await UserService.whoami({ workspace }) + return mapUserToUserExt(user) + } catch (error) { + return undefined + } } function mapUserToUserExt(user: User): UserExt { - return { - ...user, - groups: user.groups!, - pgroups: user.groups!.map((x) => `g/${x}`), - }; + return { + ...user, + groups: user.groups!, + pgroups: user.groups!.map((x) => `g/${x}`) + } }