package service import ( "context" "go.infratographer.com/x/gidx" ) func (s *service) IsUser(id gidx.PrefixedID) bool { if idType, ok := s.idPrefixMap[id.Prefix()]; ok { return idType == TypeUser } return false } func (s *service) IsAssignableResource(id gidx.PrefixedID) bool { if idType, ok := s.idPrefixMap[id.Prefix()]; ok { switch idType { case TypeOrganization, TypeProject: return true default: return false } } return false } func (s *service) AssignUser(ctx context.Context, userID gidx.PrefixedID, resourceIDs ...gidx.PrefixedID) error { var memberships []ResourceMemberships for _, resourceID := range resourceIDs { var ( role string err error ) if idType, ok := s.idPrefixMap[resourceID.Prefix()]; ok { switch idType { case TypeOrganization: role, err = s.metal.GetUserOrganizationRole(ctx, userID, resourceID) case TypeProject: role, err = s.metal.GetUserProjectRole(ctx, userID, resourceID) } } if err != nil { return err } if role == "" { continue } memberships = append(memberships, ResourceMemberships{ Resource: prefixedID{resourceID}, Role: role, Member: prefixedID{userID}, }) } s.processMemberships(ctx, memberships) s.logger.Infow("assignment sync complete", "memberships", len(memberships)) return nil } func (s *service) RemoveUser(ctx context.Context, userID gidx.PrefixedID, resourceIDs ...gidx.PrefixedID) error { return nil }