mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 00:57:33 +00:00
feat: remove org (#4148)
* feat(command): remove org * refactor: imports, unused code, error handling * reduce org removed in action * add org deletion to projections * add org removal to projections * add org removal to projections * org removed projection * lint import * projections * fix: table names in tests * fix: table names in tests * logging * add org state * fix(domain): add Owner removed to object details * feat(ListQuery): add with owner removed * fix(org-delete): add bool to functions to select with owner removed * fix(org-delete): add bools to user grants with events to determine if dependencies lost owner * fix(org-delete): add unit tests for owner removed and org removed events * fix(org-delete): add handling of org remove for grants and members * fix(org-delete): correction of unit tests for owner removed * fix(org-delete): update projections, unit tests and get functions * fix(org-delete): add change date to authnkeys and owner removed to org metadata * fix(org-delete): include owner removed for login names * fix(org-delete): some column fixes in projections and build for queries with owner removed * indexes * fix(org-delete): include review changes * fix(org-delete): change user projection name after merge * fix(org-delete): include review changes for project grant where no project owner is necessary * fix(org-delete): include auth and adminapi tables with owner removed information * fix(org-delete): cleanup username and orgdomain uniqueconstraints when org is removed * fix(org-delete): add permissions for org.remove * remove unnecessary unique constraints * fix column order in primary keys * fix(org-delete): include review changes * fix(org-delete): add owner removed indexes and chang setup step to create tables * fix(org-delete): move PK order of instance_id and change added user_grant from review * fix(org-delete): no params for prepareUserQuery * change to step 6 * merge main * fix(org-delete): OldUserName rename to private * fix linting * cleanup * fix: remove org test * create prerelease * chore: delete org-delete as prerelease Co-authored-by: Stefan Benz <stefan@caos.ch> Co-authored-by: Livio Spring <livio.a@gmail.com> Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
This commit is contained in:
@@ -103,12 +103,10 @@ func (q *MembershipSearchQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder
|
||||
return query
|
||||
}
|
||||
|
||||
func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuery) (*Memberships, error) {
|
||||
query, scan := prepareMembershipsQuery()
|
||||
stmt, args, err := queries.toQuery(query).
|
||||
Where(sq.Eq{
|
||||
membershipInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
|
||||
}).ToSql()
|
||||
func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuery, withOwnerRemoved bool) (*Memberships, error) {
|
||||
query, queryArgs, scan := prepareMembershipsQuery(withOwnerRemoved)
|
||||
eq := sq.Eq{membershipInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
|
||||
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
|
||||
if err != nil {
|
||||
return nil, errors.ThrowInvalidArgument(err, "QUERY-T84X9", "Errors.Query.InvalidRequest")
|
||||
}
|
||||
@@ -116,8 +114,9 @@ func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuer
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
queryArgs = append(queryArgs, args...)
|
||||
|
||||
rows, err := q.client.QueryContext(ctx, stmt, args...)
|
||||
rows, err := q.client.QueryContext(ctx, stmt, queryArgs...)
|
||||
if err != nil {
|
||||
return nil, errors.ThrowInternal(err, "QUERY-eAV2x", "Errors.Internal")
|
||||
}
|
||||
@@ -184,18 +183,42 @@ var (
|
||||
table: membershipAlias,
|
||||
}
|
||||
|
||||
membershipFrom = "(" +
|
||||
prepareOrgMember() +
|
||||
" UNION ALL " +
|
||||
prepareIAMMember() +
|
||||
" UNION ALL " +
|
||||
prepareProjectMember() +
|
||||
" UNION ALL " +
|
||||
prepareProjectGrantMember() +
|
||||
") AS " + membershipAlias.identifier()
|
||||
membershipOwnerRemoved = Column{
|
||||
name: projection.MemberOwnerRemoved,
|
||||
table: membershipAlias,
|
||||
}
|
||||
membershipOwnerRemovedUser = Column{
|
||||
name: projection.MemberUserOwnerRemoved,
|
||||
table: membershipAlias,
|
||||
}
|
||||
membershipGrantedOrgRemoved = Column{
|
||||
name: projection.ProjectGrantMemberGrantedOrgRemoved,
|
||||
table: membershipAlias,
|
||||
}
|
||||
)
|
||||
|
||||
func prepareMembershipsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Memberships, error)) {
|
||||
func getMembershipFromQuery(withOwnerRemoved bool) (string, []interface{}) {
|
||||
orgMembers, orgMembersArgs := prepareOrgMember(withOwnerRemoved)
|
||||
iamMembers, iamMembersArgs := prepareIAMMember(withOwnerRemoved)
|
||||
projectMembers, projectMembersArgs := prepareProjectMember(withOwnerRemoved)
|
||||
projectGrantMembers, projectGrantMembersArgs := prepareProjectGrantMember(withOwnerRemoved)
|
||||
args := make([]interface{}, 0)
|
||||
args = append(append(append(append(args, orgMembersArgs...), iamMembersArgs...), projectMembersArgs...), projectGrantMembersArgs...)
|
||||
|
||||
return "(" +
|
||||
orgMembers +
|
||||
" UNION ALL " +
|
||||
iamMembers +
|
||||
" UNION ALL " +
|
||||
projectMembers +
|
||||
" UNION ALL " +
|
||||
projectGrantMembers +
|
||||
") AS " + membershipAlias.identifier(),
|
||||
args
|
||||
}
|
||||
|
||||
func prepareMembershipsQuery(withOwnerRemoved bool) (sq.SelectBuilder, []interface{}, func(*sql.Rows) (*Memberships, error)) {
|
||||
query, args := getMembershipFromQuery(withOwnerRemoved)
|
||||
return sq.Select(
|
||||
membershipUserID.identifier(),
|
||||
membershipRoles.identifier(),
|
||||
@@ -211,11 +234,12 @@ func prepareMembershipsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Memberships,
|
||||
ProjectColumnName.identifier(),
|
||||
OrgColumnName.identifier(),
|
||||
countColumn.identifier(),
|
||||
).From(membershipFrom).
|
||||
).From(query).
|
||||
LeftJoin(join(ProjectColumnID, membershipProjectID)).
|
||||
LeftJoin(join(OrgColumnID, membershipOrgID)).
|
||||
LeftJoin(join(ProjectGrantColumnGrantID, membershipGrantID)).
|
||||
PlaceholderFormat(sq.Dollar),
|
||||
args,
|
||||
func(rows *sql.Rows) (*Memberships, error) {
|
||||
memberships := make([]*Membership, 0)
|
||||
var count uint64
|
||||
@@ -293,8 +317,8 @@ func prepareMembershipsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Memberships,
|
||||
}
|
||||
}
|
||||
|
||||
func prepareOrgMember() string {
|
||||
stmt, _ := sq.Select(
|
||||
func prepareOrgMember(withOwnerRemoved bool) (string, []interface{}) {
|
||||
builder := sq.Select(
|
||||
OrgMemberUserID.identifier(),
|
||||
OrgMemberRoles.identifier(),
|
||||
OrgMemberCreationDate.identifier(),
|
||||
@@ -306,12 +330,17 @@ func prepareOrgMember() string {
|
||||
"NULL::TEXT AS "+membershipIAMID.name,
|
||||
"NULL::TEXT AS "+membershipProjectID.name,
|
||||
"NULL::TEXT AS "+membershipGrantID.name,
|
||||
).From(orgMemberTable.identifier()).MustSql()
|
||||
return stmt
|
||||
).From(orgMemberTable.identifier())
|
||||
if !withOwnerRemoved {
|
||||
eq := sq.Eq{}
|
||||
addOrgMemberWithoutOwnerRemoved(eq)
|
||||
builder = builder.Where(eq)
|
||||
}
|
||||
return builder.MustSql()
|
||||
}
|
||||
|
||||
func prepareIAMMember() string {
|
||||
stmt, _ := sq.Select(
|
||||
func prepareIAMMember(withOwnerRemoved bool) (string, []interface{}) {
|
||||
builder := sq.Select(
|
||||
InstanceMemberUserID.identifier(),
|
||||
InstanceMemberRoles.identifier(),
|
||||
InstanceMemberCreationDate.identifier(),
|
||||
@@ -323,12 +352,17 @@ func prepareIAMMember() string {
|
||||
InstanceMemberIAMID.identifier(),
|
||||
"NULL::TEXT AS "+membershipProjectID.name,
|
||||
"NULL::TEXT AS "+membershipGrantID.name,
|
||||
).From(instanceMemberTable.identifier()).MustSql()
|
||||
return stmt
|
||||
).From(instanceMemberTable.identifier())
|
||||
if !withOwnerRemoved {
|
||||
eq := sq.Eq{}
|
||||
addIamMemberWithoutOwnerRemoved(eq)
|
||||
builder = builder.Where(eq)
|
||||
}
|
||||
return builder.MustSql()
|
||||
}
|
||||
|
||||
func prepareProjectMember() string {
|
||||
stmt, _ := sq.Select(
|
||||
func prepareProjectMember(withOwnerRemoved bool) (string, []interface{}) {
|
||||
builder := sq.Select(
|
||||
ProjectMemberUserID.identifier(),
|
||||
ProjectMemberRoles.identifier(),
|
||||
ProjectMemberCreationDate.identifier(),
|
||||
@@ -340,13 +374,17 @@ func prepareProjectMember() string {
|
||||
"NULL::TEXT AS "+membershipIAMID.name,
|
||||
ProjectMemberProjectID.identifier(),
|
||||
"NULL::TEXT AS "+membershipGrantID.name,
|
||||
).From(projectMemberTable.identifier()).MustSql()
|
||||
|
||||
return stmt
|
||||
).From(projectMemberTable.identifier())
|
||||
if !withOwnerRemoved {
|
||||
eq := sq.Eq{}
|
||||
addProjectMemberWithoutOwnerRemoved(eq)
|
||||
builder = builder.Where(eq)
|
||||
}
|
||||
return builder.MustSql()
|
||||
}
|
||||
|
||||
func prepareProjectGrantMember() string {
|
||||
stmt, _ := sq.Select(
|
||||
func prepareProjectGrantMember(withOwnerRemoved bool) (string, []interface{}) {
|
||||
builder := sq.Select(
|
||||
ProjectGrantMemberUserID.identifier(),
|
||||
ProjectGrantMemberRoles.identifier(),
|
||||
ProjectGrantMemberCreationDate.identifier(),
|
||||
@@ -358,8 +396,11 @@ func prepareProjectGrantMember() string {
|
||||
"NULL::TEXT AS "+membershipIAMID.name,
|
||||
ProjectGrantMemberProjectID.identifier(),
|
||||
ProjectGrantMemberGrantID.identifier(),
|
||||
).From(projectGrantMemberTable.identifier()).
|
||||
MustSql()
|
||||
|
||||
return stmt
|
||||
).From(projectGrantMemberTable.identifier())
|
||||
if !withOwnerRemoved {
|
||||
eq := sq.Eq{}
|
||||
addProjectGrantMemberWithoutOwnerRemoved(eq)
|
||||
builder = builder.Where(eq)
|
||||
}
|
||||
return builder.MustSql()
|
||||
}
|
||||
|
Reference in New Issue
Block a user