Skip to content
This repository was archived by the owner on Jan 15, 2024. It is now read-only.

Commit 21beb08

Browse files
Add methods to manage dashboard permissions by UID (#127)
* Add methods to manage dashboard permissions by UID Using the ID is deprecated since Grafana v9 We should switch to UIDs in the Terraform provider * Refactor
1 parent 635d1c3 commit 21beb08

File tree

2 files changed

+100
-5
lines changed

2 files changed

+100
-5
lines changed

dashboard_permissions.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@ type DashboardPermission struct {
2828
func (c *Client) DashboardPermissions(id int64) ([]*DashboardPermission, error) {
2929
permissions := make([]*DashboardPermission, 0)
3030
err := c.request("GET", fmt.Sprintf("/api/dashboards/id/%d/permissions", id), nil, nil, &permissions)
31-
if err != nil {
32-
return permissions, err
33-
}
34-
35-
return permissions, nil
31+
return permissions, err
3632
}
3733

3834
// UpdateDashboardPermissions remove existing permissions if items are not included in the request.
@@ -45,3 +41,21 @@ func (c *Client) UpdateDashboardPermissions(id int64, items *PermissionItems) er
4541

4642
return c.request("POST", path, nil, bytes.NewBuffer(data), nil)
4743
}
44+
45+
// DashboardPermissionsByUID fetches and returns the permissions for the dashboard whose UID it's passed.
46+
func (c *Client) DashboardPermissionsByUID(uid string) ([]*DashboardPermission, error) {
47+
permissions := make([]*DashboardPermission, 0)
48+
err := c.request("GET", fmt.Sprintf("/api/dashboards/uid/%s/permissions", uid), nil, nil, &permissions)
49+
return permissions, err
50+
}
51+
52+
// UpdateDashboardPermissionsByUID remove existing permissions if items are not included in the request.
53+
func (c *Client) UpdateDashboardPermissionsByUID(uid string, items *PermissionItems) error {
54+
path := fmt.Sprintf("/api/dashboards/uid/%s/permissions", uid)
55+
data, err := json.Marshal(items)
56+
if err != nil {
57+
return err
58+
}
59+
60+
return c.request("POST", path, nil, bytes.NewBuffer(data), nil)
61+
}

dashboard_permissions_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,3 +136,84 @@ func TestUpdateDashboardPermissions(t *testing.T) {
136136
t.Error(err)
137137
}
138138
}
139+
140+
func TestDashboardPermissionsByUID(t *testing.T) {
141+
client := gapiTestTools(t, 200, getDashboardPermissionsJSON)
142+
143+
resp, err := client.DashboardPermissionsByUID("nErXDvCkzz")
144+
if err != nil {
145+
t.Fatal(err)
146+
}
147+
148+
t.Log(pretty.PrettyFormat(resp))
149+
150+
expects := []*DashboardPermission{
151+
{
152+
DashboardID: 1,
153+
DashboardUID: "nErXDvCkzz",
154+
Role: "Viewer",
155+
UserID: 0,
156+
TeamID: 0,
157+
IsFolder: false,
158+
Inherited: false,
159+
Permission: 1,
160+
PermissionName: "View",
161+
},
162+
{
163+
DashboardID: 2,
164+
DashboardUID: "nErXDvCkzz",
165+
Role: "Editor",
166+
UserID: 0,
167+
TeamID: 0,
168+
IsFolder: false,
169+
Inherited: true,
170+
Permission: 2,
171+
PermissionName: "Edit",
172+
},
173+
}
174+
175+
for i, expect := range expects {
176+
t.Run("check data", func(t *testing.T) {
177+
if resp[i].DashboardID != expect.DashboardID ||
178+
resp[i].DashboardUID != expect.DashboardUID ||
179+
resp[i].Role != expect.Role ||
180+
resp[i].UserID != expect.UserID ||
181+
resp[i].TeamID != expect.TeamID ||
182+
resp[i].IsFolder != expect.IsFolder ||
183+
resp[i].Inherited != expect.Inherited ||
184+
resp[i].Permission != expect.Permission ||
185+
resp[i].PermissionName != expect.PermissionName {
186+
t.Error("Not correctly parsing returned dashboard permission")
187+
}
188+
})
189+
}
190+
}
191+
192+
func TestUpdateDashboardPermissionsByUID(t *testing.T) {
193+
client := gapiTestTools(t, 200, updateDashboardPermissionsJSON)
194+
195+
items := &PermissionItems{
196+
Items: []*PermissionItem{
197+
{
198+
Role: "viewer",
199+
Permission: 1,
200+
},
201+
{
202+
Role: "Editor",
203+
Permission: 2,
204+
},
205+
{
206+
TeamID: 1,
207+
Permission: 1,
208+
},
209+
{
210+
UserID: 11,
211+
Permission: 4,
212+
},
213+
},
214+
}
215+
err := client.UpdateDashboardPermissionsByUID("nErXDvCkzz", items)
216+
if err != nil {
217+
t.Error(err)
218+
}
219+
}

0 commit comments

Comments
 (0)