mirror of
https://github.com/zitadel/zitadel.git
synced 2025-03-01 09:17:22 +00:00
115 lines
2.7 KiB
Go
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, AddedType),
|
||
|
Role: role,
|
||
|
Permission: permission,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func roleSearchObject(role string) eventstore.Object {
|
||
|
return eventstore.Object{
|
||
|
Type: RolePermissionType,
|
||
|
ID: role,
|
||
|
Revision: RolePermissionRevision,
|
||
|
}
|
||
|
}
|