Skip to the content.

← Back to Awards Plugin

5.2.7 Domain Policy Reference

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

Overview

The DomainPolicy class provides authorization control for Domain entities within the Awards plugin. It implements organizational structure management authorization, categorical access control, and administrative oversight through delegation to the base policy framework.

Class Definition

namespace Awards\Policy;

class DomainPolicy extends BasePolicy

All authorization methods are inherited from BasePolicy and delegate to the centralized _hasPolicy() method.

Domain Management Authorization

Entity-Level Access Control

The policy inherits standard CRUD authorization methods:

Method Purpose
canView() Domain viewing with organizational access validation
canAdd() Domain creation with administrative permission requirements
canEdit() Domain editing with entity-level authorization
canDelete() Domain removal with referential integrity validation
canIndex() Domain listing with organizational scoping

Categorical Operations

All domain-specific operations leverage the inherited BasePolicy framework:

Authorization Flow

  1. Super User Check: Administrative override through BasePolicy.before()
  2. Permission Discovery: Domain operation permissions resolved through PermissionsLoader
  3. Administrative Validation: Administrative access validation through warrant-based checking
  4. Entity Authorization: Domain-specific authorization through entity-level access control

Organizational Access Control

Administrative Management

Referential Integrity Protection

Usage Examples

Controller Integration

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

public function edit($id) {
    $domain = $this->Domains->get($id);
    $this->Authorization->authorize($domain); // Uses canEdit()
    // Edit processing...
}

Administrative Operations

// Administrative domain management with policy validation
public function createDomain($domainData) {
    if (!$this->Authorization->can($this->Domains, 'add')) {
        throw new ForbiddenException('Not authorized to create domains');
    }
    
    $domain = $this->Domains->newEntity($domainData);
    return $this->Domains->save($domain);
}

Domain Configuration Management

// Domain configuration with authorization validation
public function configureDomain($domainId, $configData) {
    $domain = $this->Domains->get($domainId);
    
    if (!$this->Authorization->can($domain, 'edit')) {
        throw new ForbiddenException('Not authorized to configure domain');
    }
    
    $this->Domains->patchEntity($domain, $configData);
    return $this->Domains->save($domain);
}

Referential Integrity Validation

// Domain deletion with referential integrity checking
public function deleteDomain($domainId) {
    $domain = $this->Domains->get($domainId, ['contain' => ['Awards']]);
    
    if (!$this->Authorization->can($domain, 'delete')) {
        throw new ForbiddenException('Not authorized to delete domain');
    }
    
    if (!empty($domain->awards)) {
        throw new BadRequestException('Cannot delete domain with associated awards');
    }
    
    return $this->Domains->delete($domain);
}

Integration Points

Awards Controller Integration

RBAC System Integration

Awards Plugin Integration

Security Considerations

Access Control Security

Data Protection