Create permission scheme

Creates a new permission scheme. You can create a permission scheme with or without defining a set of permission grants. **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).

Script jira Verified

by hugo697 ยท 11/2/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 396 days ago
1
type Jira = {
2
  username: string;
3
  password: string;
4
  domain: string;
5
};
6
/**
7
 * Create permission scheme
8
 * Creates a new permission scheme. You can create a permission scheme with or without defining a set of permission grants.
9

10
**[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
11
 */
12
export async function main(
13
  auth: Jira,
14
  expand: string | undefined,
15
  body: {
16
    description?: string;
17
    expand?: string;
18
    id?: number;
19
    name: string;
20
    permissions?: {
21
      holder?: {
22
        expand?: string;
23
        parameter?: string;
24
        type: string;
25
        value?: string;
26
      };
27
      id?: number;
28
      permission?: string;
29
      self?: string;
30
      [k: string]: unknown;
31
    }[];
32
    scope?: {
33
      project?: {
34
        avatarUrls?: {
35
          "16x16"?: string;
36
          "24x24"?: string;
37
          "32x32"?: string;
38
          "48x48"?: string;
39
        };
40
        id?: string;
41
        key?: string;
42
        name?: string;
43
        projectCategory?: {
44
          description?: string;
45
          id?: string;
46
          name?: string;
47
          self?: string;
48
        };
49
        projectTypeKey?: "software" | "service_desk" | "business";
50
        self?: string;
51
        simplified?: boolean;
52
      };
53
      type?: "PROJECT" | "TEMPLATE";
54
      [k: string]: unknown;
55
    };
56
    self?: string;
57
    [k: string]: unknown;
58
  }
59
) {
60
  const url = new URL(
61
    `https://${auth.domain}.atlassian.net/rest/api/2/permissionscheme`
62
  );
63
  for (const [k, v] of [["expand", expand]]) {
64
    if (v !== undefined && v !== "") {
65
      url.searchParams.append(k, v);
66
    }
67
  }
68
  const response = await fetch(url, {
69
    method: "POST",
70
    headers: {
71
      "Content-Type": "application/json",
72
      Authorization: "Basic " + btoa(`${auth.username}:${auth.password}`),
73
    },
74
    body: JSON.stringify(body),
75
  });
76
  if (!response.ok) {
77
    const text = await response.text();
78
    throw new Error(`${response.status} ${text}`);
79
  }
80
  return await response.json();
81
}
82