Skip to the content.

← Back to Awards Plugin

5.2.9 Event Policy Reference

Last Updated: December 4, 2025
Status: Complete
Plugin: Awards
Source: plugins/Awards/src/Policy/EventPolicy.php

Overview

The EventPolicy class provides authorization control for Event entities within the Awards plugin. It manages access to award events including ceremony coordination, temporal event management, and administrative oversight through integration with the KMP RBAC system.

Class Definition

namespace Awards\Policy;

class EventPolicy extends BasePolicy

RBAC Integration Architecture

Permission-Based Authorization

BasePolicy Inheritance

The policy inherits standard CRUD authorization methods:

Method Purpose
canView() Event viewing with temporal and organizational access validation
canAdd() Event creation with administrative permission requirements
canEdit() Event editing with temporal adjustment authorization
canDelete() Event removal with recommendation state cleanup validation
canIndex() Event listing with organizational scoping

Custom Authorization Methods

canAllEvents()

Authorizes access to comprehensive event listing across temporal boundaries and organizational scopes.

public function canAllEvents(KmpIdentityInterface $user, $entity, ...$args): bool

Parameters:

Returns: true if the user can access comprehensive event listing

Purpose:

Authorization Flow

sequenceDiagram
    participant Controller
    participant Authorization
    participant EventPolicy
    participant BasePolicy
    participant PermissionsLoader
    
    Controller->>Authorization: authorize($event)
    Authorization->>EventPolicy: canEdit($user, $event)
    EventPolicy->>BasePolicy: _hasPolicy()
    BasePolicy->>BasePolicy: before() - Super User Check
    BasePolicy->>PermissionsLoader: Resolve Permissions
    PermissionsLoader-->>BasePolicy: Permission Result
    BasePolicy-->>EventPolicy: Authorization Decision
    EventPolicy-->>Authorization: bool
    Authorization-->>Controller: Authorized/Denied

Authorization Steps

  1. Super User Check: Administrative override through BasePolicy.before()
  2. Permission Discovery: Event operation permissions resolved through PermissionsLoader
  3. Temporal Validation: Event operations respect temporal boundaries and deadlines
  4. Entity Authorization: Event-specific authorization through entity-level access control

Event Operations Governance

Authorization is enforced for all event operations:

Operation Authorization Requirements
Creation Administrative permissions for creating events and setting temporal boundaries
Modification Edit permissions with temporal adjustment authorization
Deletion Delete permissions with recommendation state cleanup validation
Ceremony Management Specialized permissions for event status transitions

Usage Examples

Controller Integration

// Standard CRUD authorization in EventsController
public function view($id) {
    $event = $this->Events->get($id);
    $this->Authorization->authorize($event); // Uses canView()
    $this->set(compact('event'));
}

public function edit($id) {
    $event = $this->Events->get($id);
    $this->Authorization->authorize($event); // Uses canEdit()
    // Event editing with temporal validation...
}

Comprehensive Event Listing

// Authorization for viewing all events
public function allEvents() {
    $this->Authorization->authorize($this->Events, 'allEvents');
    // Comprehensive event listing logic with temporal filtering...
}

Administrative Operations

// Administrative event management
public function delete($id) {
    $event = $this->Events->get($id);
    $this->Authorization->authorize($event, 'delete');
    // Event deletion with recommendation cleanup...
}

Service Layer Authorization

// Event management service with policy validation
public function updateEvent($eventId, $data) {
    $event = $this->Events->get($eventId);
    if (!$this->Authorization->can($event, 'edit')) {
        throw new ForbiddenException('Not authorized to edit event');
    }
    return $this->Events->patchEntity($event, $data);
}

Integration Points

Events Controller Integration

RBAC System Integration

Awards Plugin Integration

Security Considerations

Access Control Security

Data Protection