PHPackages                             beta/access.scope.base - 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. beta/access.scope.base

ActiveLib

beta/access.scope.base
======================

1.1.0(1y ago)078↓100%1MITPHPPHP &gt;=8.0CI passing

Since Oct 11Pushed 1y ago2 watchersCompare

[ Source](https://github.com/beta-eto-code/access.scope.base)[ Packagist](https://packagist.org/packages/beta/access.scope.base)[ RSS](/packages/beta-accessscopebase/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (3)Used By (1)

Установка
---------

[](#установка)

```
composer require beta/access.scope.base

```

Данный модуль предназначен для организации глобальных (не контекстных) доступов в проекте. Это означает что единственным контекстом для данных прав может быть только пользовательская сессия.

Для организации прав в модуле предусмотрены след. сущности:

- Интерфейс пространства доступов - представляет из себя программный интерфейс использующий атрибуты AccessScope и AccessFlag.
- Пространство доступов - экземпляр AccessScope построенный через интерфейс.
- FlagAccessor - представляет реализацию интерфейса FlagAccessor интерфейс, принимает решение о доступе к флагам в пространстве доступов.
- Флаг пространства доступов - является константой интерфейса пространства доступов с атрибутом AccessFlag.
- Результат пространства доступов - экземпляр AccessScopeResult, содержащий в себе описание пространства + результаты с вычисленными доступами (либо на основе контекста пользователя или на основе значения битовой маски).

*Пример описания интерфейса пространства доступов:*

```
use Access\Scope\AccessFlag;
use Access\Scope\AccessScope;

#[AccessScope('crud')]
interface CrudAccessLevelInterface
{
    public const SCOPE = 'crud'; // для удобства работы с интерфейсом

    #[AccessFlag('Доступ на чтение')]
    public const CAN_READ = 'read';
    #[AccessFlag('Доступ на запись')]
    public const CAN_WRITE = 'write';
    #[AccessFlag('Доступ для обновления')]
    public const CAN_UPDATE = 'update';
    #[AccessFlag('Доступ для удаления')]
    public const CAN_DELETE = 'delete';
}
```

*Пример создания пространства доступов на основе интерфейса:*

```
use Access\Scope\AccessScopeBuildEntity;

$accessScope = AccessScopeBuildEntity::createAccessScope(CrudAccessLevelInterface::class);
$accessScope->getScopeName(); // crud
$accessScope->getAccessFlag('read')->getDescription(); // Доступ на чтение
$accessScope->getAccessFlag('update')->accessValue; // 8
$accessScope->getAccessFlag('delete')->accessValue; // 16
$accessScope->getAccessFlag('delete')->name; // delete
```

*Пример реализации FlagAccessor:*

```
use Access\Scope\Interfaces\FlagAccessorInterface;
use Access\Scope\Interfaces\AccessRecipientInterface;

class FlagAccessorAllowOnlyMainAdmin implements FlagAccessorInterface
{
    public function hasAccess(string $scope, string $flag, ?AccessRecipientInterface $recipient = null): bool
    {
        return $recipient && (int) ($recipient->getRecipientId()) === 1;
    }
}
```

*Пример расчета результата пространства доступов:*

```
use Access\Scope\AccessScopeBuildEntity;

$accessScope = AccessScopeBuildEntity::createAccessScope(CrudAccessLevelInterface::class);
$accessor = new FlagAccessorAllowOnlyMainAdmin();
$adminAccessScopeResult = $accessScope->createScopeResultByAccessor($accessor, $adminUserContext);
$adminAccessScopeResult->getAccessValue(); // 30
$adminAccessScopeResult->hasAccessByFlagName('read'); // true
$adminAccessScopeResult->hasAccessByFlagName('write'); // true
$adminAccessScopeResult->hasAccessByFlagName('update'); // true
$adminAccessScopeResult->hasAccessByValue(8); // true
$adminAccessScopeResult->hasAccessByFlagName('delete'); // true
$adminAccessScopeResult->hasAccessByValue(16); // true
$userAccessScopeResult = $accessScope->createScopeResultByAccessor($accessor, $simpleUserContext);
$userAccessScopeResult->getAccessValue(); // 0
$userAccessScopeResult->hasAccessByFlagName('read'); // false
$userAccessScopeResult->hasAccessByFlagName('write'); // false
$userAccessScopeResult->hasAccessByFlagName('update'); // false
$userAccessScopeResult->hasAccessByValue(8); // false
$userAccessScopeResult->hasAccessByFlagName('delete'); // false
$userAccessScopeResult->hasAccessByValue(16); // false
$resultValue = $accessScope->getAccessFlag('read')->accessValue | $accessScope->getAccessFlag('write')->accessValue;
$otherAccessScopeResult = $accessScope->createScopeResultByAccessValue($resultValue);
$otherAccessScopeResult->getAccessValue(); // 6
$otherAccessScopeResult->hasAccessByFlagName('read'); // true
$otherAccessScopeResult->hasAccessByFlagName('write'); // true
$otherAccessScopeResult->hasAccessByFlagName('update'); // false
$otherAccessScopeResult->hasAccessByValue(8); // false
$otherAccessScopeResult->hasAccessByFlagName('delete'); // false
$otherAccessScopeResult->hasAccessByValue(16); // false
```

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance44

Moderate activity, may be stable

Popularity11

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity45

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 ~139 days

Total

2

Last Release

435d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c75fd54c926c6b835a6b6cd92514d60d55a285d35847b9f22aefcc7ad5ef9ae7?d=identicon)[nnagornyy](/maintainers/nnagornyy)

---

Top Contributors

[![alex19pov31](https://avatars.githubusercontent.com/u/786683?v=4)](https://github.com/alex19pov31 "alex19pov31 (3 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/beta-accessscopebase/health.svg)

```
[![Health](https://phpackages.com/badges/beta-accessscopebase/health.svg)](https://phpackages.com/packages/beta-accessscopebase)
```

PHPackages © 2026

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