mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 21:27:42 +00:00
fix(permissions_v2): add membership fields migration (#9199)
# Which Problems Are Solved Memberships did not have a fields table fill migration. # How the Problems Are Solved Add filling of membership fields to the repeatable steps. # Additional Changes - Use the same repeatable step for multiple fill fields handlers. - Fix an error for PostgreSQL 15 where a subquery in a `FROM` clause needs an alias ing the `permitted_orgs` function. # Additional Context - Part of https://github.com/zitadel/zitadel/issues/9188 - Introduced in https://github.com/zitadel/zitadel/pull/9152
This commit is contained in:
@@ -12,6 +12,7 @@ const (
|
||||
fieldsProjectGrant = "project_grant_fields"
|
||||
fieldsOrgDomainVerified = "org_domain_verified_fields"
|
||||
fieldsInstanceDomain = "instance_domain_fields"
|
||||
fieldsMemberships = "membership_fields"
|
||||
)
|
||||
|
||||
func newFillProjectGrantFields(config handler.Config) *handler.FieldHandler {
|
||||
@@ -52,3 +53,33 @@ func newFillInstanceDomainFields(config handler.Config) *handler.FieldHandler {
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
func newFillMembershipFields(config handler.Config) *handler.FieldHandler {
|
||||
return handler.NewFieldHandler(
|
||||
&config,
|
||||
fieldsMemberships,
|
||||
map[eventstore.AggregateType][]eventstore.EventType{
|
||||
instance.AggregateType: {
|
||||
instance.MemberAddedEventType,
|
||||
instance.MemberChangedEventType,
|
||||
instance.MemberRemovedEventType,
|
||||
instance.MemberCascadeRemovedEventType,
|
||||
instance.InstanceRemovedEventType,
|
||||
},
|
||||
org.AggregateType: {
|
||||
org.MemberAddedEventType,
|
||||
org.MemberChangedEventType,
|
||||
org.MemberRemovedEventType,
|
||||
org.MemberCascadeRemovedEventType,
|
||||
org.OrgRemovedEventType,
|
||||
},
|
||||
project.AggregateType: {
|
||||
project.MemberAddedEventType,
|
||||
project.MemberChangedEventType,
|
||||
project.MemberRemovedEventType,
|
||||
project.MemberCascadeRemovedEventType,
|
||||
project.ProjectRemovedType,
|
||||
},
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@@ -60,19 +60,19 @@ func (p *projectMemberProjection) Reducers() []handler.AggregateReducer {
|
||||
Aggregate: project.AggregateType,
|
||||
EventReducers: []handler.EventReducer{
|
||||
{
|
||||
Event: project.MemberAddedType,
|
||||
Event: project.MemberAddedEventType,
|
||||
Reduce: p.reduceAdded,
|
||||
},
|
||||
{
|
||||
Event: project.MemberChangedType,
|
||||
Event: project.MemberChangedEventType,
|
||||
Reduce: p.reduceChanged,
|
||||
},
|
||||
{
|
||||
Event: project.MemberCascadeRemovedType,
|
||||
Event: project.MemberCascadeRemovedEventType,
|
||||
Reduce: p.reduceCascadeRemoved,
|
||||
},
|
||||
{
|
||||
Event: project.MemberRemovedType,
|
||||
Event: project.MemberRemovedEventType,
|
||||
Reduce: p.reduceRemoved,
|
||||
},
|
||||
{
|
||||
@@ -114,7 +114,7 @@ func (p *projectMemberProjection) Reducers() []handler.AggregateReducer {
|
||||
func (p *projectMemberProjection) reduceAdded(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*project.MemberAddedEvent)
|
||||
if !ok {
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-bgx5Q", "reduce.wrong.event.type %s", project.MemberAddedType)
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-bgx5Q", "reduce.wrong.event.type %s", project.MemberAddedEventType)
|
||||
}
|
||||
ctx := setMemberContext(e.Aggregate())
|
||||
userOwner, err := getUserResourceOwner(ctx, p.es, e.Aggregate().InstanceID, e.UserID)
|
||||
@@ -131,7 +131,7 @@ func (p *projectMemberProjection) reduceAdded(event eventstore.Event) (*handler.
|
||||
func (p *projectMemberProjection) reduceChanged(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*project.MemberChangedEvent)
|
||||
if !ok {
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-90WJ1", "reduce.wrong.event.type %s", project.MemberChangedType)
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-90WJ1", "reduce.wrong.event.type %s", project.MemberChangedEventType)
|
||||
}
|
||||
return reduceMemberChanged(
|
||||
*member.NewMemberChangedEvent(&e.BaseEvent, e.UserID, e.Roles...),
|
||||
@@ -142,7 +142,7 @@ func (p *projectMemberProjection) reduceChanged(event eventstore.Event) (*handle
|
||||
func (p *projectMemberProjection) reduceCascadeRemoved(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*project.MemberCascadeRemovedEvent)
|
||||
if !ok {
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-aGd43", "reduce.wrong.event.type %s", project.MemberCascadeRemovedType)
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-aGd43", "reduce.wrong.event.type %s", project.MemberCascadeRemovedEventType)
|
||||
}
|
||||
return reduceMemberCascadeRemoved(
|
||||
*member.NewCascadeRemovedEvent(&e.BaseEvent, e.UserID),
|
||||
@@ -153,7 +153,7 @@ func (p *projectMemberProjection) reduceCascadeRemoved(event eventstore.Event) (
|
||||
func (p *projectMemberProjection) reduceRemoved(event eventstore.Event) (*handler.Statement, error) {
|
||||
e, ok := event.(*project.MemberRemovedEvent)
|
||||
if !ok {
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-eJZPh", "reduce.wrong.event.type %s", project.MemberRemovedType)
|
||||
return nil, zerrors.ThrowInvalidArgumentf(nil, "HANDL-eJZPh", "reduce.wrong.event.type %s", project.MemberRemovedEventType)
|
||||
}
|
||||
return reduceMemberRemoved(e,
|
||||
withMemberCond(MemberUserIDCol, e.UserID),
|
||||
|
@@ -32,7 +32,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
|
||||
args: args{
|
||||
event: getEvent(
|
||||
testEvent(
|
||||
project.MemberAddedType,
|
||||
project.MemberAddedEventType,
|
||||
project.AggregateType,
|
||||
[]byte(`{
|
||||
"userId": "user-id",
|
||||
@@ -56,7 +56,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
|
||||
args: args{
|
||||
event: getEvent(
|
||||
testEvent(
|
||||
project.MemberAddedType,
|
||||
project.MemberAddedEventType,
|
||||
project.AggregateType,
|
||||
[]byte(`{
|
||||
"userId": "user-id",
|
||||
@@ -110,7 +110,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
|
||||
args: args{
|
||||
event: getEvent(
|
||||
testEvent(
|
||||
project.MemberAddedType,
|
||||
project.MemberAddedEventType,
|
||||
project.AggregateType,
|
||||
[]byte(`{
|
||||
"userId": "user-id",
|
||||
@@ -176,7 +176,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
|
||||
args: args{
|
||||
event: getEvent(
|
||||
testEvent(
|
||||
project.MemberChangedType,
|
||||
project.MemberChangedEventType,
|
||||
project.AggregateType,
|
||||
[]byte(`{
|
||||
"userId": "user-id",
|
||||
@@ -210,7 +210,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
|
||||
args: args{
|
||||
event: getEvent(
|
||||
testEvent(
|
||||
project.MemberCascadeRemovedType,
|
||||
project.MemberCascadeRemovedEventType,
|
||||
project.AggregateType,
|
||||
[]byte(`{
|
||||
"userId": "user-id"
|
||||
@@ -240,7 +240,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
|
||||
args: args{
|
||||
event: getEvent(
|
||||
testEvent(
|
||||
project.MemberRemovedType,
|
||||
project.MemberRemovedEventType,
|
||||
project.AggregateType,
|
||||
[]byte(`{
|
||||
"userId": "user-id"
|
||||
|
@@ -85,6 +85,7 @@ var (
|
||||
ProjectGrantFields *handler.FieldHandler
|
||||
OrgDomainVerifiedFields *handler.FieldHandler
|
||||
InstanceDomainFields *handler.FieldHandler
|
||||
MembershipFields *handler.FieldHandler
|
||||
)
|
||||
|
||||
type projection interface {
|
||||
@@ -174,6 +175,7 @@ func Create(ctx context.Context, sqlClient *database.DB, es handler.EventStore,
|
||||
ProjectGrantFields = newFillProjectGrantFields(applyCustomConfig(projectionConfig, config.Customizations[fieldsProjectGrant]))
|
||||
OrgDomainVerifiedFields = newFillOrgDomainVerifiedFields(applyCustomConfig(projectionConfig, config.Customizations[fieldsOrgDomainVerified]))
|
||||
InstanceDomainFields = newFillInstanceDomainFields(applyCustomConfig(projectionConfig, config.Customizations[fieldsInstanceDomain]))
|
||||
MembershipFields = newFillMembershipFields(applyCustomConfig(projectionConfig, config.Customizations[fieldsMemberships]))
|
||||
|
||||
newProjectionsList()
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user