Skip to content

Commit 1d0051e

Browse files
feat: [UIE-8128] - add new account api with (#11181)
1 parent 8ee5281 commit 1d0051e

File tree

14 files changed

+232
-3
lines changed

14 files changed

+232
-3
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/api-v4": Added
3+
---
4+
5+
New IAM endpoints and types ([#11181](https://github.com/linode/manager/pull/11181))

packages/api-v4/src/iam/iam.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { BETA_API_ROOT } from '../constants';
22
import Request, { setData, setMethod, setURL } from '../request';
3-
import { IamUserPermissions } from './types';
3+
import { IamUserPermissions, IamAccountPermissions } from './types';
44

55
/**
66
* getUserPermissions
@@ -42,3 +42,16 @@ export const updateUserPermissions = (
4242
setMethod('PUT'),
4343
setData(data)
4444
);
45+
46+
/**
47+
* getAccountPermissions
48+
*
49+
* Return all permissions for account.
50+
*
51+
*/
52+
export const getAccountPermissions = () => {
53+
return Request<IamAccountPermissions>(
54+
setURL(`${BETA_API_ROOT}/iam/role-permissions`),
55+
setMethod('GET')
56+
);
57+
};

packages/api-v4/src/iam/types.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,26 @@ export interface ResourceAccess {
2828
resource_type: ResourceType;
2929
roles: RoleType[];
3030
}
31+
32+
export interface IamAccountPermissions {
33+
account_access: Access[];
34+
resource_access: Access[];
35+
}
36+
37+
type PermissionType =
38+
| 'create_linode'
39+
| 'update_linode'
40+
| 'update_firewall'
41+
| 'delete_linode'
42+
| 'view_linode';
43+
44+
interface Access {
45+
resource_type: ResourceType;
46+
roles: Roles[];
47+
}
48+
49+
export interface Roles {
50+
name: string;
51+
description: string;
52+
permissions?: PermissionType[];
53+
}

packages/api-v4/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ export * from './betas';
5252

5353
export * from './iam';
5454

55+
export * from './resources';
56+
5557
export {
5658
baseRequest,
5759
setToken,
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from './resources';
2+
3+
export * from './types';
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { BETA_API_ROOT } from '../constants';
2+
import Request, { setMethod, setURL } from '../request';
3+
import { IamAccountResource } from './types';
4+
5+
/**
6+
* getAccountResources
7+
*
8+
* Return all resources for account.
9+
*
10+
*/
11+
export const getAccountResources = () => {
12+
return Request<IamAccountResource>(
13+
setURL(`${BETA_API_ROOT}/resources`),
14+
setMethod('GET')
15+
);
16+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
type ResourceType =
2+
| 'linode'
3+
| 'firewall'
4+
| 'nodebalancer'
5+
| 'longview'
6+
| 'domain'
7+
| 'stackscript'
8+
| 'image'
9+
| 'volume'
10+
| 'database'
11+
| 'vpc';
12+
13+
export type IamAccountResource = {
14+
resource_type: ResourceType;
15+
resources: Resource[];
16+
}[];
17+
18+
export interface Resource {
19+
name: string;
20+
id: number;
21+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/manager": Added
3+
---
4+
5+
mock data and query for new account api ([#11181](https://github.com/linode/manager/pull/11181))
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { IamAccountPermissions } from '@linode/api-v4';
2+
import Factory from 'src/factories/factoryProxy';
3+
4+
export const accountPermissionsFactory = Factory.Sync.makeFactory<IamAccountPermissions>(
5+
{
6+
account_access: [
7+
{
8+
resource_type: 'account',
9+
roles: [
10+
{
11+
name: 'account_admin',
12+
description:
13+
'Access to perform any supported action on all resources in the account',
14+
permissions: ['create_linode', 'update_linode', 'update_firewall'],
15+
},
16+
],
17+
},
18+
{
19+
resource_type: 'linode',
20+
roles: [
21+
{
22+
name: 'account_linode_admin',
23+
description:
24+
'Access to perform any supported action on all linode instances in the account',
25+
permissions: ['create_linode', 'update_linode', 'delete_linode'],
26+
},
27+
],
28+
},
29+
{
30+
resource_type: 'firewall',
31+
roles: [
32+
{
33+
name: 'firewall_creator',
34+
description: 'Access to create a firewall instance',
35+
},
36+
],
37+
},
38+
],
39+
resource_access: [
40+
{
41+
resource_type: 'linode',
42+
roles: [
43+
{
44+
name: 'linode_contributor',
45+
description: 'Access to update a linode instance',
46+
permissions: ['update_linode', 'view_linode'],
47+
},
48+
],
49+
},
50+
{
51+
resource_type: 'firewall',
52+
roles: [
53+
{
54+
name: 'firewall_viewer',
55+
description: 'Access to view a firewall instance',
56+
},
57+
{
58+
name: 'firewall_admin',
59+
description:
60+
'Access to perform any supported action on a firewall instance',
61+
},
62+
],
63+
},
64+
],
65+
}
66+
);
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { IamAccountResource } from '@linode/api-v4';
2+
import Factory from 'src/factories/factoryProxy';
3+
4+
export const accountResourcesFactory = Factory.Sync.makeFactory<IamAccountResource>(
5+
[
6+
{
7+
resource_type: 'linode',
8+
resources: [
9+
{
10+
name: 'debian-us-123',
11+
id: 12345678,
12+
},
13+
{
14+
name: 'linode-uk-123',
15+
id: 23456789,
16+
},
17+
],
18+
},
19+
{
20+
resource_type: 'firewall',
21+
resources: [
22+
{
23+
name: 'firewall-us-123',
24+
id: 45678901,
25+
},
26+
],
27+
},
28+
]
29+
);

0 commit comments

Comments
 (0)