Skip to the content.

Awards Domains Table Policy Reference

Source: plugins/Awards/src/Policy/DomainsTablePolicy.php Extends: App\Policy\BasePolicy Type: Table-level Authorization Policy

Overview

The DomainsTablePolicy class provides table-level authorization for Domains data operations. It controls administrative access for listing, bulk operations, and organizational management of award domains.

Class Definition

namespace Awards\Policy;

use App\KMP\KmpIdentityInterface;
use App\Policy\BasePolicy;

class DomainsTablePolicy extends BasePolicy

Methods

scopeGridData()

Scopes queries for the Dataverse grid data endpoint, delegating to the standard index scope.

public function scopeGridData(KmpIdentityInterface $user, mixed $query): mixed

Parameters:

Returns: The scoped query (delegates to scopeIndex())

Purpose: Enables the DataverseGrid component to use the same authorization rules as the standard index view.

Inherited Methods from BasePolicy

The policy inherits all standard table operations through BasePolicy delegation:

Method Purpose
canAdd() Authorize domain creation via permission checking
canIndex() Authorize domain listing via permission checking
canExport() Authorize domain export operations
scopeIndex() Scope domain queries based on user permissions

Authorization Architecture

Permission-Based Authorization

DomainsTablePolicy
        │
        ▼
    BasePolicy._hasPolicy()
        │
        ▼
    PermissionsLoader
        │
        ▼
    Permission Check (warrant-based)

All table operations are validated against administrative permissions through the centralized BasePolicy framework.

Administrative Access Control

Domain table operations require:

Usage Examples

Controller Integration

// DomainsController index with authorization
public function index()
{
    $this->Authorization->authorize($this->Domains);
    $query = $this->Domains->find();
    $domains = $this->paginate($query);
    $this->set(compact('domains'));
}

Checking Table Permissions

// Check administrative access before bulk operations
if ($this->Authorization->can($this->Domains, 'index')) {
    $domains = $this->Domains->find()->toArray();
}

DataverseGrid Integration

The scopeGridData() method enables DataverseGrid components to respect the same authorization rules:

// In controller using DataverseGridTrait
// GridData endpoint automatically calls scopeGridData()
public function gridData()
{
    // Authorization scoping handled automatically
    return $this->processGridData($this->Domains);
}

Integration Points

BasePolicy Integration

PermissionsLoader Integration

Awards Plugin Integration

Security Considerations

  1. Administrative Access Required: All domain table operations require authenticated administrative identity
  2. Permission Validation: Operations validated against RBAC permissions
  3. Audit Integration: Table operations logged for compliance monitoring
  4. Referential Integrity: Domain operations respect award system relationships