mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-20 08:01:35 +00:00
can read all folders if admin or superadmin + refresh user in background
This commit is contained in:
@@ -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)
|
||||
}))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
+29
-31
@@ -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<void> {
|
||||
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<UserExt | undefined> {
|
||||
try {
|
||||
const user = await UserService.whoami({ workspace });
|
||||
return mapUserToUserExt(user);
|
||||
} catch (error) {
|
||||
return undefined;
|
||||
}
|
||||
export async function getUserExt(workspace: string): Promise<UserExt | undefined> {
|
||||
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}`)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user