Skip to content

Commit 822d2a1

Browse files
authored
chore(rbac): Set organization ID in all memberships (#2178)
Signed-off-by: Jose I. Paris <[email protected]>
1 parent 4d5304f commit 822d2a1

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

app/controlplane/pkg/biz/membership.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ type MembershipRepo interface {
6060
// ListGroupMembershipsByUser returns all memberships of the users inherited from groups
6161
ListGroupMembershipsByUser(ctx context.Context, userID uuid.UUID) ([]*Membership, error)
6262
ListAllByResource(ctx context.Context, rt authz.ResourceType, id uuid.UUID) ([]*Membership, error)
63-
AddResourceRole(ctx context.Context, resourceType authz.ResourceType, resID uuid.UUID, mType authz.MembershipType, memberID uuid.UUID, role authz.Role) error
63+
AddResourceRole(ctx context.Context, orgID uuid.UUID, resourceType authz.ResourceType, resID uuid.UUID, mType authz.MembershipType, memberID uuid.UUID, role authz.Role) error
6464
}
6565

6666
type MembershipsRBAC interface {
@@ -341,7 +341,7 @@ func (uc *MembershipUseCase) ListAllMembershipsForUser(ctx context.Context, user
341341
}
342342

343343
// SetProjectOwner sets the project owner (admin role). It skips the operation if an owner exists already
344-
func (uc *MembershipUseCase) SetProjectOwner(ctx context.Context, projectID, userID uuid.UUID) error {
344+
func (uc *MembershipUseCase) SetProjectOwner(ctx context.Context, orgID, projectID, userID uuid.UUID) error {
345345
mm, err := uc.repo.ListAllByResource(ctx, authz.ResourceTypeProject, projectID)
346346
if err != nil {
347347
return fmt.Errorf("failed to find membership: %w", err)
@@ -354,7 +354,7 @@ func (uc *MembershipUseCase) SetProjectOwner(ctx context.Context, projectID, use
354354
}
355355
}
356356

357-
if err = uc.repo.AddResourceRole(ctx, authz.ResourceTypeProject, projectID, authz.MembershipTypeUser, userID, authz.RoleProjectAdmin); err != nil {
357+
if err = uc.repo.AddResourceRole(ctx, orgID, authz.ResourceTypeProject, projectID, authz.MembershipTypeUser, userID, authz.RoleProjectAdmin); err != nil {
358358
return fmt.Errorf("failed to set project owner: %w", err)
359359
}
360360

app/controlplane/pkg/biz/workflow.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,11 @@ func (uc *WorkflowUseCase) Create(ctx context.Context, opts *WorkflowCreateOpts)
160160

161161
// Set project admin if a new project has been created
162162
if opts.Owner != nil {
163-
if err = uc.membershipUC.SetProjectOwner(ctx, wf.ProjectID, *opts.Owner); err != nil {
163+
orgUUID, err := uuid.Parse(opts.OrgID)
164+
if err != nil {
165+
return nil, fmt.Errorf("failed to parse org ID %q: %w", opts.OrgID, err)
166+
}
167+
if err = uc.membershipUC.SetProjectOwner(ctx, orgUUID, wf.ProjectID, *opts.Owner); err != nil {
164168
return nil, fmt.Errorf("failed to set project owner: %w", err)
165169
}
166170
}

app/controlplane/pkg/data/membership.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,9 @@ func (r *MembershipRepo) ListAllByResource(ctx context.Context, rt authz.Resourc
310310
return entMembershipsToBiz(mm), nil
311311
}
312312

313-
func (r *MembershipRepo) AddResourceRole(ctx context.Context, resourceType authz.ResourceType, resID uuid.UUID, mType authz.MembershipType, memberID uuid.UUID, role authz.Role) error {
313+
func (r *MembershipRepo) AddResourceRole(ctx context.Context, orgID uuid.UUID, resourceType authz.ResourceType, resID uuid.UUID, mType authz.MembershipType, memberID uuid.UUID, role authz.Role) error {
314314
err := r.data.DB.Membership.Create().
315+
SetOrganizationID(orgID).
315316
SetMembershipType(mType).
316317
SetMemberID(memberID).
317318
SetResourceType(resourceType).

0 commit comments

Comments
 (0)