PHPackages                             amber-core/rbac - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. amber-core/rbac

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

amber-core/rbac
===============

Rule Based Access Control

v0.13(5y ago)138MITPHPPHP ^7.2

Since Dec 25Pushed 5y agoCompare

[ Source](https://github.com/Amber-Core-Software-Ltd/rbac)[ Packagist](https://packagist.org/packages/amber-core/rbac)[ RSS](/packages/amber-core-rbac/feed)WikiDiscussions master Synced today

READMEChangelog (3)DependenciesVersions (5)Used By (0)

Composer Install
================

[](#composer-install)

```
composer require "amber-core/rbac"
```

Using
=====

[](#using)

RbacManager Using
-----------------

[](#rbacmanager-using)

```
if($access_manager->canUser(
    RbacDictionary::PERMISSION_WORKER_DELETE,
    $user,
    ['worker' => $worker]
))
{
    $worker->delete();
}
```

### Access Manager Sample

[](#access-manager-sample)

```
class AccessManager
{
    private $rbac;

    public function __construct()
    {
        $this->rbac = new \AmberCore\Rbac\RbacManager($this->getRbacDictionary());
    }

    public function getRbacDictionary(): \AmberCore\Rbac\RbacDictionaryInterface
    {
        return new RbacDictionary();
    }

    public function canUser(
        string $permission_name,
        \AmberCore\Rbac\UserRbacInterface $user,
        ?array $arguments
    ): bool
    {
        return $this->rbac->isGranted($permission_name, $user, $arguments);
    }
}
```

### RbacDictionary Sample

[](#rbacdictionary-sample)

```
class RbacDictionary implements RbacDictionaryInterface
{

    public const
        // Workers Permissions
        PERMISSION_WORKER_CREATE = 'worker_create',
        PERMISSION_WORKER_READ = 'worker_read',
        PERMISSION_WORKER_UPDATE = 'worker_update',
        PERMISSION_WORKER_DELETE = 'worker_delete',

        PERMISSION_WORKER_LIST_VIEW = 'worker_list_view',

        PERMISSIONS =
        [
            UserRoleDictionary::ROLE_ADMIN => [
                //Admin can everything that can Accountant
                'role' => UserRoleDictionary::ROLE_ACCOUNTANT
            ],
            UserRoleDictionary::ROLE_ACCOUNTANT => [
                // Accountant can everything that can User plus it own permissions
                'role' => UserRoleDictionary::ROLE_USER,
                self::PERMISSION_WORKER_CREATE,
                self::PERMISSION_WORKER_UPDATE,
                self::PERMISSION_WORKER_DELETE,
            ],
            UserRoleDictionary::ROLE_USER => [
                self::PERMISSION_WORKER_LIST_VIEW,
                self::PERMISSION_WORKER_READ,
            ]
        ],

        RULES =
        [
            // If there is rule for Permission then rbac will execute rule
            // otherwise rbac will return true if permission in the rule description
            // or false if not
            self::PERMISSION_WORKER_UPDATE => WorkerUpdateRule::class,
            self::PERMISSION_WORKER_DELETE => WorkerDeleteRule::class,
            self::PERMISSION_WORKER_READ => WorkerViewRule::class,
        ];

    public static function getPermissions(string $role): array
    {
        return self::PERMISSIONS[$role];
    }

    public static function getRuleClassName(string $permission_name): ?string
    {
        if (array_key_exists($permission_name, self::RULES))
        {
            return self::RULES[$permission_name];
        }

        return null;
    }
}
```

### Rule Sample

[](#rule-sample)

```
class WorkerDeleteRule extends \AmberCore\Rbac\Rules\AbstractRule
{
    /**
    * @param UserEntity $user
    * @param array|null $arguments
    * @return bool
    */
    public function execute(\AmberCore\Rbac\UserRbacInterface $user, ?array $arguments): bool
    {
        /** @var UserEntity $worker */
        $worker = $arguments['worker'];

        return
            // return true if they are in the one company
            $this->checkRule(
                IsInOneCompanyRule::class,
                $user,
                ['user' => $worker]
            ) &&
            // return true if user is manager for this worker
            $user->isManagerForWorker($worker);
    }
}

class IsInOneCompanyRule extends \AmberCore\Rbac\Rules\AbstractRule
{
    /**
    * @param UserEntity $user
    * @param array|null $arguments
    * @return bool
    */
    public function execute(\AmberCore\Rbac\UserRbacInterface $user, ?array $arguments): bool
    {
        /** @var UserEntity $target_user */
        $target_user = $arguments['user'];

        return $user->getCompany()->getId() === $target_user->getCompany()->getId();
    }
}
```

###  Health Score

21

—

LowBetter than 18% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

4

Last Release

2002d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/68352513?v=4)[amber-core](/maintainers/amber-core)[@Amber-Core](https://github.com/Amber-Core)

---

Top Contributors

[![NJG-CORP](https://avatars.githubusercontent.com/u/20493180?v=4)](https://github.com/NJG-CORP "NJG-CORP (6 commits)")

---

Tags

accessrbacrule

### Embed Badge

![Health badge](/badges/amber-core-rbac/health.svg)

```
[![Health](https://phpackages.com/badges/amber-core-rbac/health.svg)](https://phpackages.com/packages/amber-core-rbac)
```

###  Alternatives

[spatie/laravel-permission

Permission handling for Laravel 12 and up

12.9k102.4M1.4k](/packages/spatie-laravel-permission)[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k3.9M126](/packages/bezhansalleh-filament-shield)[santigarcor/laratrust

This package provides a flexible way to add Role-based Permissions to Laravel

2.3k5.8M47](/packages/santigarcor-laratrust)[2amigos/yii2-usuario

Highly customizable and extensible user management, authentication, and authorization Yii2 extension

297285.0k16](/packages/2amigos-yii2-usuario)[laminas/laminas-permissions-rbac

Provides a role-based access control management

363.6M33](/packages/laminas-laminas-permissions-rbac)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
