Skip to content

Commit 66a17a3

Browse files
committed
RHINENG-18385: allow 'equal' opration in resourceDefinitions
1 parent 4261be9 commit 66a17a3

2 files changed

Lines changed: 75 additions & 4 deletions

File tree

manager/middlewares/rbac.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,7 @@ func findInventoryGroups(access *rbac.AccessPagination) (map[string]string, erro
161161
continue
162162
}
163163

164-
// https://github.com/RedHatInsights/insights-host-inventory/
165-
// blob/a7c8a7c980012c89e18ec0f7074609e216b37a8d/lib/middleware.py#L124
166-
if rd.AttributeFilter.Operation != "in" {
164+
if rd.AttributeFilter.Operation != "in" && rd.AttributeFilter.Operation != "equal" {
167165
err := fmt.Errorf(
168166
"invalid value '%s' for attributeFilter.Operation",
169167
rd.AttributeFilter.Operation,

manager/middlewares/rbac_test.go

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package middlewares
33
import (
44
"app/base/rbac"
55
"app/base/utils"
6+
"encoding/json"
67
"net/http"
78
"net/http/httptest"
89
"testing"
@@ -372,7 +373,7 @@ func TestFindInventoryGroupsInvalidOp(t *testing.T) {
372373
AttributeFilter: rbac.AttributeFilter{
373374
Key: "group.id",
374375
Value: []*string{},
375-
Operation: "equal",
376+
Operation: "unsupported",
376377
},
377378
}},
378379
},
@@ -412,3 +413,75 @@ func TestMultiplePermissions(t *testing.T) {
412413
assert.True(t, checkPermissions(&access, handler, "GET"))
413414
assert.False(t, checkPermissions(&access, handler, "DELETE"))
414415
}
416+
417+
var allowedOperations = `{"data": [
418+
{
419+
"resourceDefinitions": [],
420+
"permission": "patch:*:read"
421+
},
422+
{
423+
"resourceDefinitions": [
424+
{
425+
"attributeFilter": {
426+
"key": "group.id",
427+
"value": "00000000-f688-49d4-a8e2-87394f1ac1b1",
428+
"operation": "equal"
429+
}
430+
}
431+
],
432+
"permission": "inventory:hosts:read"
433+
},
434+
{
435+
"resourceDefinitions": [
436+
{
437+
"attributeFilter": {
438+
"key": "group.id",
439+
"value": [ "00000000-f7a6-45a1-b5a8-410f20052fb1", "00000000-78e0-4cad-bf01-63cf1e4b1dca" ],
440+
"operation": "in"
441+
}
442+
}
443+
],
444+
"permission": "inventory:hosts:read"
445+
},
446+
{
447+
"resourceDefinitions": [
448+
{
449+
"attributeFilter": {
450+
"key": "group.id",
451+
"value": [ "00000000-f688-49d4-a8e2-ee394f1ac1b1" ],
452+
"operation": "in"
453+
}
454+
}
455+
],
456+
"permission": "inventory:hosts:read"
457+
},
458+
{
459+
"resourceDefinitions": [
460+
{
461+
"attributeFilter": {
462+
"key": "group.id",
463+
"value": null,
464+
"operation": "equal"
465+
}
466+
}
467+
],
468+
"permission": "inventory:hosts:read"
469+
}
470+
]
471+
}
472+
`
473+
474+
func TestPermissionsAllowedOperations(t *testing.T) {
475+
handler := "SystemsListHandler"
476+
access := rbac.AccessPagination{}
477+
err := json.Unmarshal([]byte(allowedOperations), &access)
478+
assert.NoError(t, err)
479+
assert.True(t, checkPermissions(&access, handler, "GET"))
480+
groups, err := findInventoryGroups(&access)
481+
assert.NoError(t, err)
482+
assert.Equal(t, "[]", groups["ungrouped"])
483+
assert.Equal(t, `{"[{\"id\":\"00000000-f688-49d4-a8e2-87394f1ac1b1\"}]",`+
484+
`"[{\"id\":\"00000000-f7a6-45a1-b5a8-410f20052fb1\"}]",`+
485+
`"[{\"id\":\"00000000-78e0-4cad-bf01-63cf1e4b1dca\"}]",`+
486+
`"[{\"id\":\"00000000-f688-49d4-a8e2-ee394f1ac1b1\"}]"}`, groups["grouped"])
487+
}

0 commit comments

Comments
 (0)