functions.php

PHP

Path: src/Authorizer/functions.php

<?php

namespace mini;

use mini\Authorizer\Ability;
use mini\Authorizer\Authorization;

Mini::$mini->addService(Authorization::class, Lifetime::Singleton, fn() => new Authorization());

/**
 * Check authorization
 *
 * Checks if the current user can perform an ability on an entity.
 * Returns false if no handler allows the action.
 *
 * ## Usage
 *
 * ```php
 * // Collection-level
 * can(Ability::List, User::class);
 * can(Ability::Create, Post::class);
 *
 * // Instance-level
 * can(Ability::Read, $user);
 * can(Ability::Update, $post);
 * can(Ability::Delete, $comment);
 *
 * // Field-level
 * can(Ability::Update, $user, 'role');
 * can(Ability::Read, $employee, 'salary');
 * ```
 *
 * @param Ability|string $ability The ability to check
 * @param object|string $entity Entity instance or class name
 * @param string|null $field Optional field name for field-level checks
 * @return bool True if allowed, false if denied
 * @throws \InvalidArgumentException If string ability is not registered
 */
function can(Ability|string $ability, object|string $entity, ?string $field = null): bool
{
    return Mini::$mini->get(Authorization::class)->can($ability, $entity, $field);
}