@@ -0,0 +1,72 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
// AdminRoles lists application and shared garden role templates.
|
||||
func (c *Client) AdminRoles(ctx context.Context) ([]Role, []Role, *Response, error) {
|
||||
var envelope struct {
|
||||
ApplicationRoles []Role `json:"application_roles"`
|
||||
GardenRoles []Role `json:"garden_roles"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodGet, "v1/admin/roles", nil, &envelope)
|
||||
return envelope.ApplicationRoles, envelope.GardenRoles, response, err
|
||||
}
|
||||
|
||||
// CreateAdminRole adds a shared role template.
|
||||
func (c *Client) CreateAdminRole(ctx context.Context, input RoleInput) (Role, *Response, error) {
|
||||
var envelope struct {
|
||||
Role Role `json:"role"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodPost, "v1/admin/roles", input, &envelope)
|
||||
return envelope.Role, response, err
|
||||
}
|
||||
|
||||
// UpdateAdminRole changes a shared role template.
|
||||
func (c *Client) UpdateAdminRole(ctx context.Context, name string, input RoleInput) (Role, *Response, error) {
|
||||
var envelope struct {
|
||||
Role Role `json:"role"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodPatch, "v1/admin/roles/"+url.PathEscape(name), input, &envelope)
|
||||
return envelope.Role, response, err
|
||||
}
|
||||
|
||||
// DeleteAdminRole removes an unused shared role template.
|
||||
func (c *Client) DeleteAdminRole(ctx context.Context, name string) (*Response, error) {
|
||||
return c.do(ctx, http.MethodDelete, "v1/admin/roles/"+url.PathEscape(name), nil, nil)
|
||||
}
|
||||
|
||||
// GardenRoleSettings lists roles and their effective permissions in a garden.
|
||||
func (c *Client) GardenRoleSettings(ctx context.Context, gardenID int) ([]GardenRoleSetting, *Response, error) {
|
||||
var envelope struct {
|
||||
Roles []GardenRoleSetting `json:"roles"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodGet, gardenPath(gardenID)+"/roles", nil, &envelope)
|
||||
return envelope.Roles, response, err
|
||||
}
|
||||
|
||||
// UpdateGardenRoleSettings replaces a role's effective permissions in a garden.
|
||||
func (c *Client) UpdateGardenRoleSettings(ctx context.Context, gardenID int, name string, permissions []string) ([]string, *Response, error) {
|
||||
var envelope struct {
|
||||
EffectivePermissions []string `json:"effective_permissions"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodPut, gardenPath(gardenID)+"/roles/"+url.PathEscape(name), map[string][]string{"permissions": permissions}, &envelope)
|
||||
return envelope.EffectivePermissions, response, err
|
||||
}
|
||||
|
||||
// CreateGardenRole adds a custom role owned by one garden.
|
||||
func (c *Client) CreateGardenRole(ctx context.Context, gardenID int, input RoleInput) (Role, *Response, error) {
|
||||
var envelope struct {
|
||||
Role Role `json:"role"`
|
||||
}
|
||||
response, err := c.do(ctx, http.MethodPost, gardenPath(gardenID)+"/roles", input, &envelope)
|
||||
return envelope.Role, response, err
|
||||
}
|
||||
|
||||
// DeleteGardenRole removes an unused custom role from a garden.
|
||||
func (c *Client) DeleteGardenRole(ctx context.Context, gardenID int, name string) (*Response, error) {
|
||||
return c.do(ctx, http.MethodDelete, gardenPath(gardenID)+"/roles/"+url.PathEscape(name), nil, nil)
|
||||
}
|
||||
Reference in New Issue
Block a user