mirror of
https://github.com/zitadel/zitadel.git
synced 2025-10-15 06:51:18 +00:00
policies implemented
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
package iam
|
||||
|
||||
import "github.com/caos/zitadel/internal/eventstore/v2"
|
||||
import (
|
||||
"github.com/caos/zitadel/internal/eventstore/v2"
|
||||
)
|
||||
|
||||
type Aggregate struct {
|
||||
eventstore.Aggregate
|
||||
|
||||
SetUpStarted Step
|
||||
SetUpDone Step
|
||||
}
|
||||
|
@@ -24,11 +24,10 @@ func (e *GlobalOrgSetEvent) Data() interface{} {
|
||||
return e
|
||||
}
|
||||
|
||||
func NewGlobalOrgSetEventEvent(ctx context.Context, service, orgID string) *GlobalOrgSetEvent {
|
||||
func NewGlobalOrgSetEventEvent(ctx context.Context, orgID string) *GlobalOrgSetEvent {
|
||||
return &GlobalOrgSetEvent{
|
||||
BaseEvent: *eventstore.NewBaseEventForPush(
|
||||
ctx,
|
||||
service,
|
||||
GlobalOrgSetEventType,
|
||||
),
|
||||
OrgID: orgID,
|
||||
|
@@ -7,28 +7,27 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
IAMProjectSetEventType eventstore.EventType = "iam.project.iam.set"
|
||||
ProjectSetEventType eventstore.EventType = "iam.project.iam.set"
|
||||
)
|
||||
|
||||
type IAMProjectSetEvent struct {
|
||||
type ProjectSetEvent struct {
|
||||
eventstore.BaseEvent `json:"-"`
|
||||
|
||||
ProjectID string `json:"iamProjectId"`
|
||||
}
|
||||
|
||||
func (e *IAMProjectSetEvent) CheckPrevious() bool {
|
||||
func (e *ProjectSetEvent) CheckPrevious() bool {
|
||||
return e.Type() == SetupStartedEventType
|
||||
}
|
||||
|
||||
func (e *IAMProjectSetEvent) Data() interface{} {
|
||||
func (e *ProjectSetEvent) Data() interface{} {
|
||||
return e
|
||||
}
|
||||
|
||||
func NewIAMProjectSetEvent(ctx context.Context, service, projectID string) *IAMProjectSetEvent {
|
||||
return &IAMProjectSetEvent{
|
||||
func NewProjectSetEvent(ctx context.Context, projectID string) *ProjectSetEvent {
|
||||
return &ProjectSetEvent{
|
||||
BaseEvent: *eventstore.NewBaseEventForPush(
|
||||
ctx,
|
||||
service,
|
||||
SetupDoneEventType,
|
||||
),
|
||||
ProjectID: projectID,
|
||||
|
@@ -2,8 +2,11 @@ package iam
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/eventstore/v2"
|
||||
"github.com/caos/zitadel/internal/eventstore/v2/repository"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -17,6 +20,7 @@ type SetupStepEvent struct {
|
||||
eventstore.BaseEvent `json:"-"`
|
||||
|
||||
Step Step `json:"Step"`
|
||||
Done bool `json:"-"`
|
||||
}
|
||||
|
||||
func (e *SetupStepEvent) CheckPrevious() bool {
|
||||
@@ -27,21 +31,32 @@ func (e *SetupStepEvent) Data() interface{} {
|
||||
return e
|
||||
}
|
||||
|
||||
func NewSetupStepDoneEvent(ctx context.Context, service string) *SetupStepEvent {
|
||||
func SetupStepMapper(event *repository.Event) (eventstore.EventReader, error) {
|
||||
step := &SetupStepEvent{
|
||||
BaseEvent: *eventstore.BaseEventFromRepo(event),
|
||||
Done: eventstore.EventType(event.Type) == SetupDoneEventType,
|
||||
}
|
||||
err := json.Unmarshal(event.Data, step)
|
||||
if err != nil {
|
||||
return nil, errors.ThrowInternal(err, "IAM-O6rVg", "unable to unmarshal step")
|
||||
}
|
||||
|
||||
return step, nil
|
||||
}
|
||||
|
||||
func NewSetupStepDoneEvent(ctx context.Context) *SetupStepEvent {
|
||||
return &SetupStepEvent{
|
||||
BaseEvent: *eventstore.NewBaseEventForPush(
|
||||
ctx,
|
||||
service,
|
||||
SetupDoneEventType,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
func NewSetupStepStartedEvent(ctx context.Context, service string) *SetupStepEvent {
|
||||
func NewSetupStepStartedEvent(ctx context.Context) *SetupStepEvent {
|
||||
return &SetupStepEvent{
|
||||
BaseEvent: *eventstore.NewBaseEventForPush(
|
||||
ctx,
|
||||
service,
|
||||
SetupStartedEventType,
|
||||
),
|
||||
}
|
||||
|
52
internal/v2/repository/iam/read_model.go
Normal file
52
internal/v2/repository/iam/read_model.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package iam
|
||||
|
||||
import (
|
||||
"github.com/caos/zitadel/internal/eventstore/v2"
|
||||
"github.com/caos/zitadel/internal/v2/repository/member"
|
||||
)
|
||||
|
||||
type ReadModel struct {
|
||||
eventstore.ReadModel
|
||||
|
||||
SetUpStarted Step
|
||||
SetUpDone Step
|
||||
|
||||
Members member.MembersReadModel
|
||||
|
||||
GlobalOrgID string
|
||||
ProjectID string
|
||||
}
|
||||
|
||||
func (rm *ReadModel) AppendEvents(events ...eventstore.EventReader) (err error) {
|
||||
rm.ReadModel.AppendEvents(events...)
|
||||
for _, event := range events {
|
||||
switch event.(type) {
|
||||
case *member.MemberAddedEvent, *member.MemberChangedEvent, *member.MemberRemovedEvent:
|
||||
err = rm.Members.AppendEvents(events...)
|
||||
}
|
||||
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (rm *ReadModel) Reduce() (err error) {
|
||||
for _, event := range rm.Events {
|
||||
switch e := event.(type) {
|
||||
case *ProjectSetEvent:
|
||||
rm.ProjectID = e.ProjectID
|
||||
case *GlobalOrgSetEvent:
|
||||
rm.GlobalOrgID = e.OrgID
|
||||
case *SetupStepEvent:
|
||||
if e.Done {
|
||||
rm.SetUpDone = e.Step
|
||||
} else {
|
||||
rm.SetUpStarted = e.Step
|
||||
}
|
||||
}
|
||||
}
|
||||
err = rm.Members.Reduce()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return rm.ReadModel.Reduce()
|
||||
}
|
Reference in New Issue
Block a user