betocampoy/champs-access

Lightweight access control core for PHP projects. Permission checking by user, resource and provider adapters.

Maintainers

Package info

github.com/betocampoy/champs-access

pkg:composer/betocampoy/champs-access

Statistics

Installs: 4

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-04-27 19:29 UTC

This package is auto-updated.

Last update: 2026-04-27 19:34:03 UTC


README

Lightweight permission checker for PHP projects.

Install

composer require betocampoy/champs-access

Basic Usage

use BetoCampoy\Champs\Access\AccessChecker;
use BetoCampoy\Champs\Access\ArrayPermissionProvider;
use BetoCampoy\Champs\Access\GenericUser;
use BetoCampoy\Champs\Access\GenericResource;
use BetoCampoy\Champs\Access\Permission;

$provider = new ArrayPermissionProvider([
    'admin' => [
        'users' => [
            Permission::ACCESS => true,
            Permission::CREATE => true,
            Permission::UPDATE => true,
            Permission::DELETE => true,
        ],
    ],
]);

$checker = new AccessChecker($provider);

$user = new GenericUser(1, 'admin');
$resource = new GenericResource('users', 'users');

$checker->can($user, $resource, Permission::UPDATE); // true

Assert Access

$checker->assertCan($user, $resource, Permission::DELETE);

Throws AccessDeniedException.

Multiple Permissions

$checker->canAny($user, $resource, [
    Permission::UPDATE,
    Permission::DELETE,
]);

$checker->canAll($user, $resource, [
    Permission::ACCESS,
    Permission::UPDATE,
]);

Custom Provider

use BetoCampoy\Champs\Access\PermissionProviderInterface;

final class DatabasePermissionProvider implements PermissionProviderInterface
{
    public function permissionsFor($user, $resource): array
    {
        return [
            'acessar' => true,
            'alterar' => true,
        ];
    }
}

Recommended Architecture

Package responsibilities:

  • permission rules
  • access checking
  • reusable interfaces

Application responsibilities:

  • redirects
  • flash messages
  • JSON responses
  • HTTP 403
  • database queries
  • framework integration