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