Livio Spring c6e27183c1
fix: correct event type for permission removed (#9626)
# Which Problems Are Solved

When we recently changed some permission for the `SYSTEM_OWNER` role on
QA, we noticed that there we multiple `permission.added` even when we
removed specific permissions.

# How the Problems Are Solved

Fixed the event type when removing permissions.

# Additional Changes

None

# Additional Context

Noticed when rolling out some changes on QA

(cherry picked from commit e7c7f9b800dcb01bf4307bde9d7f957dfad62a02)
2025-03-28 07:40:19 +01:00

115 lines
2.7 KiB
Go

package permission
import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
)
// Event types
const (
permissionEventPrefix eventstore.EventType = "permission."
AddedType = permissionEventPrefix + "added"
RemovedType = permissionEventPrefix + "removed"
)
// Field table and unique types
const (
RolePermissionType string = "role_permission"
RolePermissionRevision uint8 = 1
PermissionSearchField string = "permission"
)
type AddedEvent struct {
*eventstore.BaseEvent `json:"-"`
Role string `json:"role"`
Permission string `json:"permission"`
}
func (e *AddedEvent) Payload() interface{} {
return e
}
func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
func (e *AddedEvent) SetBaseEvent(event *eventstore.BaseEvent) {
e.BaseEvent = event
}
func (e *AddedEvent) Fields() []*eventstore.FieldOperation {
return []*eventstore.FieldOperation{
eventstore.SetField(
e.Aggregate(),
roleSearchObject(e.Role),
PermissionSearchField,
&eventstore.Value{
Value: e.Permission,
MustBeUnique: false,
ShouldIndex: true,
},
eventstore.FieldTypeInstanceID,
eventstore.FieldTypeResourceOwner,
eventstore.FieldTypeAggregateType,
eventstore.FieldTypeAggregateID,
eventstore.FieldTypeObjectType,
eventstore.FieldTypeObjectID,
eventstore.FieldTypeFieldName,
eventstore.FieldTypeValue,
),
}
}
func NewAddedEvent(ctx context.Context, aggregate *eventstore.Aggregate, role, permission string) *AddedEvent {
return &AddedEvent{
BaseEvent: eventstore.NewBaseEventForPush(ctx, aggregate, AddedType),
Role: role,
Permission: permission,
}
}
type RemovedEvent struct {
*eventstore.BaseEvent `json:"-"`
Role string `json:"role"`
Permission string `json:"permission"`
}
func (e *RemovedEvent) Payload() interface{} {
return e
}
func (e *RemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
func (e *RemovedEvent) SetBaseEvent(event *eventstore.BaseEvent) {
e.BaseEvent = event
}
func (e *RemovedEvent) Fields() []*eventstore.FieldOperation {
return []*eventstore.FieldOperation{
eventstore.RemoveSearchFieldsByAggregateAndObject(
e.Aggregate(),
roleSearchObject(e.Role),
),
}
}
func NewRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregate, role, permission string) *RemovedEvent {
return &RemovedEvent{
BaseEvent: eventstore.NewBaseEventForPush(ctx, aggregate, RemovedType),
Role: role,
Permission: permission,
}
}
func roleSearchObject(role string) eventstore.Object {
return eventstore.Object{
Type: RolePermissionType,
ID: role,
Revision: RolePermissionRevision,
}
}