Edits history of script submission #23594 for ' Remove User or Group from Folder (windmill)'

  • bunnative
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    
    import * as wmill from "windmill-client"
    
    // windmill-client errors only carry the status text: throw the response body, which says why
    wmill.OpenAPI.interceptors.response.use(async (response) => {
      if (!response.ok) {
        throw new Error(`${response.status} ${await response.text()}`)
      }
      return response
    })
    
    export type DynSelect_name = string
    
    export async function name() {
      const names = await wmill.FolderService.listFolderNames({
        workspace: wmill.getWorkspace(),
      })
      return names.map((n) => ({ value: n, label: n }))
    }
    
    /**
     * Remove User or Group from Folder
     * 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.
     */
    export async function main(name: DynSelect_name, member: string) {
      const ws = wmill.getWorkspace()
      const folder = await wmill.FolderService.getFolder({ workspace: ws, name })
      // admins live in `owners`, viewer/writer grants in `extra_perms`: revoke both
      if (folder.owners.includes(member)) {
        await wmill.FolderService.removeOwnerToFolder({
          workspace: ws,
          name,
          requestBody: { owner: member },
        })
      }
      if (member in (folder.extra_perms ?? {})) {
        await wmill.GranularAclService.removeGranularAcls({
          workspace: ws,
          kind: "folder",
          path: name,
          requestBody: { owner: member },
        })
      }
      return await wmill.FolderService.getFolder({ workspace: ws, name })
    }
    

    Submitted by hugo989 5 hours ago