diff --git a/users/service.go b/users/service.go index dfc1ebeb8c..441b206786 100644 --- a/users/service.go +++ b/users/service.go @@ -5,6 +5,7 @@ package users import ( "context" + "strings" "time" "github.com/absmach/magistrala" @@ -523,6 +524,11 @@ func (svc service) ListMembers(ctx context.Context, token, objectKind, objectID } pm.IDs = userIDs + var nameQuery string + if pm.Name != "" && len(pm.IDs) != 0 { + nameQuery = pm.Name + pm.Name = "" + } cp, err := svc.clients.RetrieveAll(ctx, pm) if err != nil { return mgclients.MembersPage{}, errors.Wrap(svcerr.ErrViewEntity, err) @@ -538,6 +544,17 @@ func (svc service) ListMembers(ctx context.Context, token, objectKind, objectID } } + if nameQuery != "" { + filteredClients := make([]mgclients.Client, 0, len(cp.Clients)) + for _, c := range cp.Clients { + if strings.Contains(strings.ToLower(c.Name), strings.ToLower(nameQuery)) { + filteredClients = append(filteredClients, c) + } + } + cp.Clients = filteredClients + cp.Total = uint64(len(filteredClients)) + } + if pm.ListPerms && len(cp.Clients) > 0 { g, ctx := errgroup.WithContext(ctx) diff --git a/users/service_test.go b/users/service_test.go index ae9c6febe2..ae604c444e 100644 --- a/users/service_test.go +++ b/users/service_test.go @@ -2201,6 +2201,50 @@ func TestListMembers(t *testing.T) { }, err: nil, }, + { + desc: "list members with policies successsfully of the groups kind and name query", + token: validToken, + groupID: validID, + objectKind: authsvc.GroupsKind, + objectID: validID, + page: mgclients.Page{Offset: 0, Limit: 100, Permission: "read", Name: client.Name}, + identifyResponse: &magistrala.IdentityRes{UserId: client.ID}, + authorizeReq: &magistrala.AuthorizeReq{ + SubjectType: authsvc.UserType, + SubjectKind: authsvc.TokenKind, + Subject: validToken, + Permission: "read", + ObjectType: authsvc.GroupType, + Object: validID, + }, + listAllSubjectsReq: &magistrala.ListSubjectsReq{ + SubjectType: authsvc.UserType, + Permission: "read", + Object: validID, + ObjectType: authsvc.GroupType, + }, + authorizeResponse: &magistrala.AuthorizeRes{Authorized: true}, + listAllSubjectsResponse: &magistrala.ListSubjectsRes{ + Policies: []string{validPolicy}, + }, + retrieveAllResponse: mgclients.ClientsPage{ + Page: mgclients.Page{ + Total: 1, + Offset: 0, + Limit: 100, + }, + Clients: []mgclients.Client{client}, + }, + response: mgclients.MembersPage{ + Page: mgclients.Page{ + Total: 1, + Offset: 0, + Limit: 100, + }, + Members: []mgclients.Client{basicClient}, + }, + err: nil, + }, { desc: "list members with invalid token", token: inValidToken,