0

Remove User or Group from Folder

by
Published today

Revoke all access a user (`u/<username>`) or group (`g/<group>`) has to a folder, admin included. Requires a folder admin or a workspace admin.

Script windmill Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 4 hours ago
1
//native
2

3
import * as wmill from "windmill-client"
4

5
// windmill-client errors only carry the status text: throw the response body, which says why
6
wmill.OpenAPI.interceptors.response.use(async (response) => {
7
  if (!response.ok) {
8
    throw new Error(`${response.status} ${await response.text()}`)
9
  }
10
  return response
11
})
12

13
export type DynSelect_name = string
14

15
export async function name() {
16
  const names = await wmill.FolderService.listFolderNames({
17
    workspace: wmill.getWorkspace(),
18
  })
19
  return names.map((n) => ({ value: n, label: n }))
20
}
21

22
/**
23
 * Remove User or Group from Folder
24
 * Revoke all access a user (`u/<username>`) or group (`g/<group>`) has to a folder, admin included. Requires a folder admin or a workspace admin.
25
 */
26
export async function main(name: DynSelect_name, member: string) {
27
  const ws = wmill.getWorkspace()
28
  const folder = await wmill.FolderService.getFolder({ workspace: ws, name })
29
  // admins live in `owners`, viewer/writer grants in `extra_perms`: revoke both
30
  if (folder.owners.includes(member)) {
31
    await wmill.FolderService.removeOwnerToFolder({
32
      workspace: ws,
33
      name,
34
      requestBody: { owner: member },
35
    })
36
  }
37
  if (member in (folder.extra_perms ?? {})) {
38
    await wmill.GranularAclService.removeGranularAcls({
39
      workspace: ws,
40
      kind: "folder",
41
      path: name,
42
      requestBody: { owner: member },
43
    })
44
  }
45
  return await wmill.FolderService.getFolder({ workspace: ws, name })
46
}
47