From c4eaeee7afff730ff6a740f5a0ff5e5d1e6c59ff Mon Sep 17 00:00:00 2001 From: Fabi <38692350+fgerschwiler@users.noreply.github.com> Date: Thu, 11 Jun 2020 16:43:22 +0200 Subject: [PATCH] fix: org member in setup (#213) --- .../repository/eventsourcing/eventstore/org.go | 5 +++-- internal/org/repository/eventsourcing/eventstore.go | 6 +++--- internal/org/repository/eventsourcing/org_member.go | 13 ++++++++----- .../org/repository/eventsourcing/org_member_test.go | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/internal/admin/repository/eventsourcing/eventstore/org.go b/internal/admin/repository/eventsourcing/eventstore/org.go index ade3b8a323e..2d2e98fa580 100644 --- a/internal/admin/repository/eventsourcing/eventstore/org.go +++ b/internal/admin/repository/eventsourcing/eventstore/org.go @@ -16,6 +16,7 @@ import ( const ( DEFAULT_POLICY = "0" + orgOwnerRole = "ORG_OWNER" ) type OrgRepo struct { @@ -47,8 +48,8 @@ func (repo *OrgRepo) SetUpOrg(ctx context.Context, setUp *admin_model.SetupOrg) aggregates = append(aggregates, userAggregates...) setupModel := &Setup{Org: org, User: user} - member := org_model.NewOrgMemberWithRoles(org.AggregateID, user.AggregateID, "ORG_ADMIN") //TODO: role as const - _, memberAggregate, err := repo.OrgEventstore.PrepareAddOrgMember(ctx, member) + member := org_model.NewOrgMemberWithRoles(org.AggregateID, user.AggregateID, orgOwnerRole) + _, memberAggregate, err := repo.OrgEventstore.PrepareAddOrgMember(ctx, member, org.AggregateID) if err != nil { return nil, err } diff --git a/internal/org/repository/eventsourcing/eventstore.go b/internal/org/repository/eventsourcing/eventstore.go index 6ccf48d89f3..a4b7f490546 100644 --- a/internal/org/repository/eventsourcing/eventstore.go +++ b/internal/org/repository/eventsourcing/eventstore.go @@ -151,19 +151,19 @@ func (es *OrgEventstore) OrgMemberByIDs(ctx context.Context, member *org_model.O return nil, errors.ThrowNotFound(nil, "EVENT-SXji6", "member not found") } -func (es *OrgEventstore) PrepareAddOrgMember(ctx context.Context, member *org_model.OrgMember) (*model.OrgMember, *es_models.Aggregate, error) { +func (es *OrgEventstore) PrepareAddOrgMember(ctx context.Context, member *org_model.OrgMember, resourceOwner string) (*model.OrgMember, *es_models.Aggregate, error) { if member == nil || !member.IsValid() { return nil, nil, errors.ThrowPreconditionFailed(nil, "EVENT-9dk45", "UserID and Roles are required") } repoMember := model.OrgMemberFromModel(member) - addAggregate, err := orgMemberAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoMember) + addAggregate, err := orgMemberAddedAggregate(ctx, es.Eventstore.AggregateCreator(), repoMember, resourceOwner) return repoMember, addAggregate, err } func (es *OrgEventstore) AddOrgMember(ctx context.Context, member *org_model.OrgMember) (*org_model.OrgMember, error) { - repoMember, addAggregate, err := es.PrepareAddOrgMember(ctx, member) + repoMember, addAggregate, err := es.PrepareAddOrgMember(ctx, member, "") if err != nil { return nil, err } diff --git a/internal/org/repository/eventsourcing/org_member.go b/internal/org/repository/eventsourcing/org_member.go index 26ff8b65823..605cf41e46e 100644 --- a/internal/org/repository/eventsourcing/org_member.go +++ b/internal/org/repository/eventsourcing/org_member.go @@ -9,12 +9,16 @@ import ( usr_model "github.com/caos/zitadel/internal/user/repository/eventsourcing/model" ) -func orgMemberAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, member *model.OrgMember) (*es_models.Aggregate, error) { +func orgMemberAddedAggregate(ctx context.Context, aggCreator *es_models.AggregateCreator, member *model.OrgMember, resourceOwner string) (agg *es_models.Aggregate, err error) { if member == nil { return nil, errors.ThrowInvalidArgument(nil, "EVENT-c63Ap", "member must not be nil") } - aggregate, err := aggCreator.NewAggregate(ctx, member.AggregateID, model.OrgAggregate, model.OrgVersion, member.Sequence) + if resourceOwner != "" { + agg, err = aggCreator.NewAggregate(ctx, member.AggregateID, model.OrgAggregate, model.OrgVersion, member.Sequence, es_models.OverwriteResourceOwner(resourceOwner)) + } else { + agg, err = aggCreator.NewAggregate(ctx, member.AggregateID, model.OrgAggregate, model.OrgVersion, member.Sequence) + } if err != nil { return nil, err } @@ -23,9 +27,8 @@ func orgMemberAddedAggregate(ctx context.Context, aggCreator *es_models.Aggregat AggregateTypeFilter(model.OrgAggregate, usr_model.UserAggregate). AggregateIDsFilter(member.AggregateID, member.UserID) - validation := addMemberValidation(aggregate, member) - - return aggregate.SetPrecondition(validationQuery, validation).AppendEvent(model.OrgMemberAdded, member) + validation := addMemberValidation(agg, member) + return agg.SetPrecondition(validationQuery, validation).AppendEvent(model.OrgMemberAdded, member) } func orgMemberChangedAggregate(aggCreator *es_models.AggregateCreator, existingMember *model.OrgMember, member *model.OrgMember) func(ctx context.Context) (*es_models.Aggregate, error) { diff --git a/internal/org/repository/eventsourcing/org_member_test.go b/internal/org/repository/eventsourcing/org_member_test.go index fb83f6792a4..266ed0a7785 100644 --- a/internal/org/repository/eventsourcing/org_member_test.go +++ b/internal/org/repository/eventsourcing/org_member_test.go @@ -54,7 +54,7 @@ func TestOrgMemberAddedAggregate(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - aggregate, err := orgMemberAddedAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.member) + aggregate, err := orgMemberAddedAggregate(tt.args.ctx, tt.args.aggCreator, tt.args.member, "") if tt.res.isErr == nil && err != nil { t.Errorf("no error expected got: %v", err) }