account_user_grants.go raw
1 package linodego
2
3 import (
4 "context"
5 )
6
7 type GrantPermissionLevel string
8
9 const (
10 AccessLevelReadOnly GrantPermissionLevel = "read_only"
11 AccessLevelReadWrite GrantPermissionLevel = "read_write"
12 )
13
14 type GlobalUserGrants struct {
15 AccountAccess *GrantPermissionLevel `json:"account_access"`
16 AddDatabases bool `json:"add_databases"`
17 AddDomains bool `json:"add_domains"`
18 AddFirewalls bool `json:"add_firewalls"`
19 AddImages bool `json:"add_images"`
20 AddLinodes bool `json:"add_linodes"`
21 AddLongview bool `json:"add_longview"`
22 AddNodeBalancers bool `json:"add_nodebalancers"`
23 AddStackScripts bool `json:"add_stackscripts"`
24 AddVolumes bool `json:"add_volumes"`
25 AddVPCs bool `json:"add_vpcs"`
26 CancelAccount bool `json:"cancel_account"`
27 ChildAccountAccess bool `json:"child_account_access"`
28 LongviewSubscription bool `json:"longview_subscription"`
29 }
30
31 type EntityUserGrant struct {
32 ID int `json:"id"`
33 Permissions *GrantPermissionLevel `json:"permissions"`
34 }
35
36 type GrantedEntity struct {
37 ID int `json:"id"`
38 Label string `json:"label"`
39 Permissions GrantPermissionLevel `json:"permissions"`
40 }
41
42 type UserGrants struct {
43 Database []GrantedEntity `json:"database"`
44 Domain []GrantedEntity `json:"domain"`
45 Firewall []GrantedEntity `json:"firewall"`
46 Image []GrantedEntity `json:"image"`
47 Linode []GrantedEntity `json:"linode"`
48 Longview []GrantedEntity `json:"longview"`
49 NodeBalancer []GrantedEntity `json:"nodebalancer"`
50 PlacementGroup []GrantedEntity `json:"placement_group"`
51 StackScript []GrantedEntity `json:"stackscript"`
52 Volume []GrantedEntity `json:"volume"`
53 VPC []GrantedEntity `json:"vpc"`
54
55 Global GlobalUserGrants `json:"global"`
56 }
57
58 type UserGrantsUpdateOptions struct {
59 Database []GrantedEntity `json:"database,omitempty"`
60 Domain []EntityUserGrant `json:"domain,omitempty"`
61 Firewall []EntityUserGrant `json:"firewall,omitempty"`
62 Image []EntityUserGrant `json:"image,omitempty"`
63 Linode []EntityUserGrant `json:"linode,omitempty"`
64 Longview []EntityUserGrant `json:"longview,omitempty"`
65 NodeBalancer []EntityUserGrant `json:"nodebalancer,omitempty"`
66 PlacementGroup []EntityUserGrant `json:"placement_group,omitempty"`
67 StackScript []EntityUserGrant `json:"stackscript,omitempty"`
68 Volume []EntityUserGrant `json:"volume,omitempty"`
69 VPC []EntityUserGrant `json:"vpc,omitempty"`
70
71 Global GlobalUserGrants `json:"global"`
72 }
73
74 func (c *Client) GetUserGrants(ctx context.Context, username string) (*UserGrants, error) {
75 e := formatAPIPath("account/users/%s/grants", username)
76 return doGETRequest[UserGrants](ctx, c, e)
77 }
78
79 func (c *Client) UpdateUserGrants(ctx context.Context, username string, opts UserGrantsUpdateOptions) (*UserGrants, error) {
80 e := formatAPIPath("account/users/%s/grants", username)
81 return doPUTRequest[UserGrants](ctx, c, e, opts)
82 }
83