Skip to content

Commit 14faa93

Browse files
Merge pull request grafana#118 from grafana/service-account-permissions
Adding endpoints for service account permission updates
2 parents c3af28d + ca11935 commit 14faa93

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

service_account_permissions.go

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package gapi
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"fmt"
7+
)
8+
9+
// ServiceAccountPermission represents a service account permission for a user or a team.
10+
type ServiceAccountPermission struct {
11+
ID int64 `json:"id"`
12+
TeamID int64 `json:"teamId,omitempty"`
13+
UserID int64 `json:"userId,omitempty"`
14+
IsManaged bool `json:"isManaged"`
15+
Permission string `json:"permission"`
16+
}
17+
18+
// ServiceAccountPermissionItems represents Grafana service account permission items used for permission updates.
19+
type ServiceAccountPermissionItems struct {
20+
Permissions []*ServiceAccountPermissionItem `json:"permissions"`
21+
}
22+
23+
// ServiceAccountPermissionItem represents a Grafana service account permission item.
24+
type ServiceAccountPermissionItem struct {
25+
TeamID int64 `json:"teamId,omitempty"`
26+
UserID int64 `json:"userId,omitempty"`
27+
Permission string `json:"permission"`
28+
}
29+
30+
// GetServiceAccountPermissions fetches and returns the permissions for the service account whose ID it's passed in.
31+
func (c *Client) GetServiceAccountPermissions(id int64) ([]*ServiceAccountPermission, error) {
32+
permissions := make([]*ServiceAccountPermission, 0)
33+
err := c.request("GET", fmt.Sprintf("/api/access-control/serviceaccounts/%d", id), nil, nil, &permissions)
34+
if err != nil {
35+
return permissions, err
36+
}
37+
38+
return permissions, nil
39+
}
40+
41+
// UpdateServiceAccountPermissions updates service account permissions for teams and users included in the request.
42+
func (c *Client) UpdateServiceAccountPermissions(id int64, items *ServiceAccountPermissionItems) error {
43+
path := fmt.Sprintf("/api/access-control/serviceaccounts/%d", id)
44+
data, err := json.Marshal(items)
45+
if err != nil {
46+
return err
47+
}
48+
49+
return c.request("POST", path, nil, bytes.NewBuffer(data), nil)
50+
}

0 commit comments

Comments
 (0)