settings: Add ListRoleAssignmentByRole
This adds the implementation for ListRolesAssignments by role-id to the metadata backend. Because of the current layout of the account folders and assignment files this is currently still very inefficient. Related Issue: #8939
This commit is contained in:
committed by
Ralf Haferkamp
parent
90f7cc23f4
commit
d7f10f38a0
@@ -355,7 +355,8 @@ func (g Service) ListRoleAssignmentsFiltered(ctx context.Context, req *settingss
|
||||
accountUUID := getValidatedAccountUUID(ctx, filters[0].GetAccountUuid())
|
||||
r, err = g.manager.ListRoleAssignments(accountUUID)
|
||||
case settingsmsg.UserRoleAssignmentFilter_TYPE_ROLE:
|
||||
err = fmt.Errorf("filtering by role not implemented")
|
||||
roleID := filters[0].GetRoleId()
|
||||
r, err = g.manager.ListRoleAssignmentsByRole(roleID)
|
||||
}
|
||||
if err != nil {
|
||||
return merrors.NotFound(g.id, "%s", err)
|
||||
|
||||
@@ -235,7 +235,7 @@ func TestListPermissionsOfOtherUser(t *testing.T) {
|
||||
assert.Contains(t, err.Error(), req.AccountUuid)
|
||||
}
|
||||
|
||||
func TestListRoleAssignmentsFiltered(t *testing.T) {
|
||||
func TestListRoleAssignmentsFilteredValidation(t *testing.T) {
|
||||
manager := &mocks.Manager{}
|
||||
svc := Service{
|
||||
manager: manager,
|
||||
@@ -336,3 +336,117 @@ func TestListRoleAssignmentsFiltered(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestListRoleAssignmentsFilteredByAccount(t *testing.T) {
|
||||
accountUUID := "61445573-4dbe-4d56-88dc-88ab47aceba7"
|
||||
|
||||
tests := map[string]struct {
|
||||
result []*settingsmsg.UserRoleAssignment
|
||||
err error
|
||||
status int32
|
||||
}{
|
||||
"handles manager error": {
|
||||
result: nil,
|
||||
err: assert.AnError,
|
||||
status: http.StatusNotFound,
|
||||
},
|
||||
"succeeds with results": {
|
||||
result: []*settingsmsg.UserRoleAssignment{
|
||||
{
|
||||
Id: "00000000-0000-0000-0000-000000000001",
|
||||
AccountUuid: accountUUID,
|
||||
RoleId: "aceb15b8-7486-479f-ae32-c91118e07a39",
|
||||
},
|
||||
},
|
||||
err: nil,
|
||||
status: http.StatusOK,
|
||||
},
|
||||
}
|
||||
|
||||
for name, test := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
manager := &mocks.Manager{}
|
||||
svc := Service{
|
||||
manager: manager,
|
||||
}
|
||||
manager.On("ListRoleAssignments", mock.Anything).Return(test.result, test.err)
|
||||
req := &v0.ListRoleAssignmentsFilteredRequest{
|
||||
Filters: []*settingsmsg.UserRoleAssignmentFilter{
|
||||
{
|
||||
Type: settingsmsg.UserRoleAssignmentFilter_TYPE_ACCOUNT,
|
||||
Term: &settingsmsg.UserRoleAssignmentFilter_AccountUuid{
|
||||
AccountUuid: accountUUID,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
res := v0.ListRoleAssignmentsResponse{}
|
||||
err := svc.ListRoleAssignmentsFiltered(ctxWithUUID, req, &res)
|
||||
switch test.err {
|
||||
case nil:
|
||||
assert.Nil(t, err)
|
||||
default:
|
||||
merr, ok := merrors.As(err)
|
||||
assert.True(t, ok)
|
||||
assert.Equal(t, int32(test.status), merr.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestListRoleAssignmentsFilteredByRole(t *testing.T) {
|
||||
roleID := "61445573-4dbe-4d56-88dc-88ab47aceba7"
|
||||
|
||||
tests := map[string]struct {
|
||||
result []*settingsmsg.UserRoleAssignment
|
||||
err error
|
||||
status int32
|
||||
}{
|
||||
"handles manager error": {
|
||||
result: nil,
|
||||
err: assert.AnError,
|
||||
status: http.StatusNotFound,
|
||||
},
|
||||
"succeeds with results": {
|
||||
result: []*settingsmsg.UserRoleAssignment{
|
||||
{
|
||||
Id: "00000000-0000-0000-0000-000000000001",
|
||||
AccountUuid: "aceb15b8-7486-479f-ae32-c91118e07a39",
|
||||
RoleId: roleID,
|
||||
},
|
||||
},
|
||||
err: nil,
|
||||
status: http.StatusOK,
|
||||
},
|
||||
}
|
||||
|
||||
for name, test := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
manager := &mocks.Manager{}
|
||||
svc := Service{
|
||||
manager: manager,
|
||||
}
|
||||
manager.On("ListRoleAssignmentsByRole", mock.Anything).Return(test.result, test.err)
|
||||
req := &v0.ListRoleAssignmentsFilteredRequest{
|
||||
Filters: []*settingsmsg.UserRoleAssignmentFilter{
|
||||
{
|
||||
Type: settingsmsg.UserRoleAssignmentFilter_TYPE_ROLE,
|
||||
Term: &settingsmsg.UserRoleAssignmentFilter_RoleId{
|
||||
RoleId: roleID,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
res := v0.ListRoleAssignmentsResponse{}
|
||||
err := svc.ListRoleAssignmentsFiltered(ctxWithUUID, req, &res)
|
||||
switch test.err {
|
||||
case nil:
|
||||
assert.Nil(t, err)
|
||||
default:
|
||||
merr, ok := merrors.As(err)
|
||||
assert.True(t, ok)
|
||||
assert.Equal(t, int32(test.status), merr.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user