mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-03 05:42:22 +00:00
fix: Remove user with cascading memberships (#1811)
* fix: remove usermemberships on user remove * fix: text user remove with memberships * fix: translations * Update internal/iam/repository/eventsourcing/model/types.go Co-authored-by: Livio Amstutz <livio.a@gmail.com> * fix: uncomment tests * fix: remove memberships if user removed Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
@@ -298,6 +298,14 @@ func (repo *UserRepo) SearchUserMemberships(ctx context.Context, request *usr_mo
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (repo *UserRepo) UserMembershipsByUserID(ctx context.Context, userID string) ([]*usr_model.UserMembershipView, error) {
|
||||
memberships, err := repo.View.UserMembershipsByUserID(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return model.UserMembershipsToModel(memberships), nil
|
||||
}
|
||||
|
||||
func (r *UserRepo) getUserChanges(ctx context.Context, userID string, lastSequence uint64, limit uint64, sortAscending bool, retention time.Duration) (*usr_model.UserChanges, error) {
|
||||
query := usr_view.ChangesQuery(userID, lastSequence, limit, sortAscending, retention)
|
||||
|
||||
|
||||
@@ -109,7 +109,8 @@ func (m *OrgMember) processOrgMember(event *es_models.Event) (err error) {
|
||||
return err
|
||||
}
|
||||
err = member.AppendEvent(event)
|
||||
case model.OrgMemberRemoved:
|
||||
case model.OrgMemberRemoved,
|
||||
model.OrgMemberCascadeRemoved:
|
||||
err = member.SetData(event)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -111,7 +111,8 @@ func (p *ProjectGrantMember) processProjectGrantMember(event *es_models.Event) (
|
||||
return err
|
||||
}
|
||||
err = member.AppendEvent(event)
|
||||
case proj_es_model.ProjectGrantMemberRemoved:
|
||||
case proj_es_model.ProjectGrantMemberRemoved,
|
||||
proj_es_model.ProjectGrantMemberCascadeRemoved:
|
||||
err = member.SetData(event)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -154,9 +155,12 @@ func (p *ProjectGrantMember) processUser(event *es_models.Event) (err error) {
|
||||
p.fillUserData(member, user)
|
||||
}
|
||||
return p.view.PutProjectGrantMembers(members, event)
|
||||
case usr_es_model.UserRemoved:
|
||||
p.view.DeleteProjectGrantMembersByUserID(event.AggregateID)
|
||||
default:
|
||||
return p.view.ProcessedProjectGrantMemberSequence(event)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *ProjectGrantMember) fillData(member *view_model.ProjectGrantMemberView) (err error) {
|
||||
|
||||
@@ -111,7 +111,7 @@ func (p *ProjectMember) processProjectMember(event *es_models.Event) (err error)
|
||||
return err
|
||||
}
|
||||
err = member.AppendEvent(event)
|
||||
case proj_es_model.ProjectMemberRemoved:
|
||||
case proj_es_model.ProjectMemberRemoved, proj_es_model.ProjectMemberCascadeRemoved:
|
||||
err = member.SetData(event)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -150,6 +150,8 @@ func (p *ProjectMember) processUser(event *es_models.Event) (err error) {
|
||||
p.fillUserData(member, user)
|
||||
}
|
||||
return p.view.PutProjectMembers(members, event)
|
||||
case usr_es_model.UserRemoved:
|
||||
p.view.DeleteProjectMembersByUserID(event.AggregateID)
|
||||
default:
|
||||
return p.view.ProcessedProjectMemberSequence(event)
|
||||
}
|
||||
|
||||
@@ -107,7 +107,8 @@ func (m *UserMembership) processIAM(event *es_models.Event) (err error) {
|
||||
return err
|
||||
}
|
||||
err = member.AppendEvent(event)
|
||||
case iam_es_model.IAMMemberRemoved:
|
||||
case iam_es_model.IAMMemberRemoved,
|
||||
iam_es_model.IAMMemberCascadeRemoved:
|
||||
return m.view.DeleteUserMembership(member.UserID, event.AggregateID, event.AggregateID, usr_model.MemberTypeIam, event)
|
||||
default:
|
||||
return m.view.ProcessedUserMembershipSequence(event)
|
||||
@@ -137,7 +138,7 @@ func (m *UserMembership) processOrg(event *es_models.Event) (err error) {
|
||||
return err
|
||||
}
|
||||
err = member.AppendEvent(event)
|
||||
case org_es_model.OrgMemberRemoved:
|
||||
case org_es_model.OrgMemberRemoved, org_es_model.OrgMemberCascadeRemoved:
|
||||
return m.view.DeleteUserMembership(member.UserID, event.AggregateID, event.AggregateID, usr_model.MemberTypeOrganisation, event)
|
||||
case org_es_model.OrgChanged:
|
||||
return m.updateOrgDisplayName(event)
|
||||
@@ -190,7 +191,7 @@ func (m *UserMembership) processProject(event *es_models.Event) (err error) {
|
||||
return err
|
||||
}
|
||||
err = member.AppendEvent(event)
|
||||
case proj_es_model.ProjectMemberRemoved:
|
||||
case proj_es_model.ProjectMemberRemoved, proj_es_model.ProjectMemberCascadeRemoved:
|
||||
return m.view.DeleteUserMembership(member.UserID, event.AggregateID, event.AggregateID, usr_model.MemberTypeProject, event)
|
||||
case proj_es_model.ProjectGrantMemberChanged:
|
||||
member, err = m.view.UserMembershipByIDs(member.UserID, event.AggregateID, member.ObjectID, usr_model.MemberTypeProjectGrant)
|
||||
@@ -198,7 +199,8 @@ func (m *UserMembership) processProject(event *es_models.Event) (err error) {
|
||||
return err
|
||||
}
|
||||
err = member.AppendEvent(event)
|
||||
case proj_es_model.ProjectGrantMemberRemoved:
|
||||
case proj_es_model.ProjectGrantMemberRemoved,
|
||||
proj_es_model.ProjectGrantMemberCascadeRemoved:
|
||||
return m.view.DeleteUserMembership(member.UserID, event.AggregateID, member.ObjectID, usr_model.MemberTypeProjectGrant, event)
|
||||
case proj_es_model.ProjectChanged:
|
||||
return m.updateProjectDisplayName(event)
|
||||
|
||||
@@ -57,6 +57,10 @@ func (v *View) DeleteProjectGrantMembersByProjectID(projectID string) error {
|
||||
return view.DeleteProjectGrantMembersByProjectID(v.Db, projectGrantMemberTable, projectID)
|
||||
}
|
||||
|
||||
func (v *View) DeleteProjectGrantMembersByUserID(userID string) error {
|
||||
return view.DeleteProjectGrantMembersByUserID(v.Db, projectGrantMemberTable, userID)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestProjectGrantMemberSequence() (*repository.CurrentSequence, error) {
|
||||
return v.latestSequence(projectGrantMemberTable)
|
||||
}
|
||||
|
||||
@@ -57,6 +57,10 @@ func (v *View) DeleteProjectMembersByProjectID(projectID string) error {
|
||||
return view.DeleteProjectMembersByProjectID(v.Db, projectMemberTable, projectID)
|
||||
}
|
||||
|
||||
func (v *View) DeleteProjectMembersByUserID(userID string) error {
|
||||
return view.DeleteProjectMembersByUserID(v.Db, projectMemberTable, userID)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestProjectMemberSequence() (*repository.CurrentSequence, error) {
|
||||
return v.latestSequence(projectMemberTable)
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@ func (v *View) UserMembershipsByAggregateID(aggregateID string) ([]*model.UserMe
|
||||
return view.UserMembershipsByAggregateID(v.Db, userMembershipTable, aggregateID)
|
||||
}
|
||||
|
||||
func (v *View) UserMembershipsByUserID(userID string) ([]*model.UserMembershipView, error) {
|
||||
return view.UserMembershipsByUserID(v.Db, userMembershipTable, userID)
|
||||
}
|
||||
|
||||
func (v *View) SearchUserMemberships(request *usr_model.UserMembershipSearchRequest) ([]*model.UserMembershipView, uint64, error) {
|
||||
return view.SearchUserMemberships(v.Db, userMembershipTable, request)
|
||||
}
|
||||
|
||||
@@ -38,4 +38,5 @@ type UserRepository interface {
|
||||
AddressByID(ctx context.Context, userID string) (*model.Address, error)
|
||||
|
||||
SearchUserMemberships(ctx context.Context, request *model.UserMembershipSearchRequest) (*model.UserMembershipSearchResponse, error)
|
||||
UserMembershipsByUserID(ctx context.Context, userID string) ([]*model.UserMembershipView, error)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user