PHPackages                             shasoft/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. shasoft/rbac

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

shasoft/rbac
============

PHP Role-Based Access Control

v1.0.1(6mo ago)01MITPHP

Since Oct 23Pushed 6mo agoCompare

[ Source](https://github.com/shasoft/rbac)[ Packagist](https://packagist.org/packages/shasoft/rbac)[ RSS](/packages/shasoft-rbac/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (6)Versions (3)Used By (0)

Управление доступом на основе ролей и разрешений
================================================

[](#управление-доступом-на-основе-ролей-и-разрешений)

Этот пакет содержит библиотеку [RBAC](https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%BC_%D0%BD%D0%B0_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5_%D1%80%D0%BE%D0%BB%D0%B5%D0%B9) для PHP

### Введение

[](#введение)

#### Роли и разрешения

[](#роли-и-разрешения)

У каждой роли могут быть дочерние роли а также разрешения. Родительские роли наследуют все разрешения дочерних ролей.

 ```
flowchart BT
    admin([admin])
    moderator([moderator])
    user([user])
    guest([guest])
    forum.view(forum.view)
    forum.edit(forum.edit)
    forum.remove(forum.remove)
    user.ban(user.ban)
    moderator.assign(moderator.assign)

    moderator --> admin
    user --> moderator
    guest --> user
    forum.view --> guest
    forum.edit --> user
    forum.remove --> moderator
    user.ban --> moderator
    moderator.assign --> admin

    classDef default fill:LightSalmon
    classDef Permission fill:Khaki

    class admin,moderator,user,guest Role
    class forum.view,moderator.assign,forum.edit,forum.remove,user.ban Permission
```

      Loading В результате наследования разрешения каждой роли:

**роль**: *разрешения*

- **admin**: *moderator.assign*, *user.ban*, *forum.remove*, *forum.edit*, *forum.view*
- **moderator**: *user.ban*, *forum.remove*, *forum.edit*, *forum.view*
- **user**: *forum.edit*, *forum.view*
- **guest**: *forum.view*

#### Права пользователя

[](#права-пользователя)

Каждому пользователю назначается список ролей и разрешений

 ```
flowchart BT
    userAdmin@{ shape: curv-trap, label: "Admin" }
    userModerator@{ shape: curv-trap, label: "Moderator" }
    userUser1@{ shape: curv-trap, label: "User1" }
    userUser2@{ shape: curv-trap, label: "User2" }
    userGuest@{ shape: curv-trap, label: "Guest" }
    admin([admin])
    moderator([moderator])
    forum.remove(forum.remove)
    user([user])
    guest([guest])

    admin --> userAdmin
    moderator --> userModerator
    user --> userUser2
    forum.remove --> userUser2
    user --> userUser1
    guest --> userGuest

    classDef User fill:LightSkyBlue,stroke:Green,stroke-width:2px
    classDef default fill:LightSalmon
    classDef Permission fill:Khaki

    class admin,moderator,user,guest Role
    class forum.view,moderator.assign,forum.edit,forum.remove,user.ban Permission
    class userAdmin,userModerator,userUser1,userUser2,userGuest User
```

      Loading ### Установка

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

```
composer require shasoft/rbac

```

### Пример использования

[](#пример-использования)

Схема прав

 ```
flowchart BT
    user@{ shape: curv-trap, label: "1" }
    p1(p1)
    p2(p2)
    p3(p3)
    p4(p4)
    R1([R1])

    R1 --> user
    p2 --> user
    p1 --> R1
    p4 --> R1

    classDef User fill:LightSkyBlue,stroke:Green,stroke-width:2px
    classDef default fill:LightSalmon
    classDef Permission fill:Khaki

    class R1 Role
    class p1,p2,p3,p4 Permission
    class user User
```

      Loading Код использования схемы

```
// Создать сервис
$rbac = new Rbac((new SQLiteDatabase('filename'))->create());
// Создать схему ролей и разрешений для пользователя
$p1 = $rbac->permission('p1');
$p2 = $rbac->permission('p2');
$p3 = $rbac->permission('p3');
$p4 = $rbac->permission('p4')->setLinkToBan(true); // Связать с баном
$R1 = $rbac->permission('R1')->permissionAdd($p1)->permissionAdd($p4);
$user = $rbac->user(1)->roleAdd($R1)->permissionAdd($p2);
// Сохранить данные в хранилище
$rbac->flush();
// Выполнить проверки
$user->can('p1'); // True
$user->can('p2'); // True
$user->can('p3'); // False
$user->can('p4'); // True
// Забанить пользователя на 5 часов
$user->setBan(new \Datetime('+5 hours'));
$rbac->flush();
// Выполнить проверки
$user->can('p1'); // True
$user->can('p2'); // True
$user->can('p3'); // False
$user->can('p4'); // False (так как разрешение связано с баном, то теперь оно не доступно)

```

#### Интерфейсы

[](#интерфейсы)

```
interface IRbac
{
    public function permission(string $name): IPermission;
    public function permissions(): array;

    public function role(string $name): IRole;
    public function roles(): array;

    public function user(int $userId): IUser;
    public function users(): array;

    public function reset(): IRbac;
    public function flush(): IRbac;
}

interface IUser
{
    public function delete(): void;
    public function restore(): void;
    public function hasExists(): bool;

    public function id(): int;

    public function roleAdd(IRole|string $role): IUser;
    public function roleRemove(IRole|string $role): IUser;
    public function roles(bool $all = false): array;

    public function permissionAdd(IPermission|string $permission): IUser;
    public function permissionRemove(IPermission|string $permission): IUser;
    public function permissions(bool $all = false): array;

    public function can(string $permissionName): bool;
    public function hasRole(string $roleName): bool;

    public function ban(): bool;
    public function setBan(?\DateTime $dtTo): IUser;
    public function getBan(): ?\DateTime;

    public function values(string $prefix): array;
}

interface IRole
{
    public function delete(): void;
    public function restore(): void;
    public function hasExists(): bool;

    public function name(): string;

    public function setDescription(string $value): IRole;
    public function description(): string;

    public function roleAdd(IRole|string $role): IRole;
    public function roleRemove(IRole|string $role): IRole;
    public function roles(bool $all = false): array;

    public function permissionAdd(IPermission|string $permission): IRole;
    public function permissionRemove(IPermission|string $permission): IRole;
    public function permissions(bool $all = false): array;
}

interface IPermission
{
    public function delete(): void;
    public function restore(): void;
    public function hasExists(): bool;

    public function name(): string;

    public function setDescription(string $value): IPermission;
    public function description(): string;

    public function setLinkToBan(bool $value): IPermission;
    public function hasLinkToBan(): bool;

    public function setPrefixValue(string $value): IPermission;
    public function getPrefixValue(): string;
}

```

### Поддержка пользовательских хранилищ

[](#поддержка-пользовательских-хранилищ)

Для создания своего хранилище необходимо реализовать следующий интерфейс.

```
interface IStorage
{
    public function onFlush(array $actions): void;
    public function onReset(): void;

    public function onReadPermission(array $contexts): void;
    public function onReadAllPermission(int $maxRecords, callable $cb): void;

    public function onReadRole(array $contexts): void;
    public function onReadAllRole(int $maxRecords, callable $cb): void;

    public function onReadUser(array $contexts): void;
    public function onReadAllUser(int $maxRecords, callable $cb): void;

    public function onCacheRead(string $type, string $name): ?array;
    public function onCacheWrite(string $type, string $name, array $refs): void;
    public function onCacheGets(string $type, array $refs, int $maxRecords, callable $cb): void;
    public function onCacheRemove(string $type, array $names): void;
}

```

По умолчанию в штатную поставку входит реализация хранилища для работы с [sqlite](https://www.sqlite.org/)

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance66

Regular maintenance activity

Popularity1

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity36

Early-stage or recently created project

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

Total

2

Last Release

199d ago

### Community

Maintainers

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

---

Tags

accessrbac

###  Code Quality

TestsPHPUnit

### Embed Badge

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

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

###  Alternatives

[spatie/laravel-permission

Permission handling for Laravel 12 and up

12.9k89.8M1.0k](/packages/spatie-laravel-permission)[santigarcor/laratrust

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

2.3k5.4M43](/packages/santigarcor-laratrust)[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k2.9M88](/packages/bezhansalleh-filament-shield)[casbin/casbin

a powerful and efficient open-source access control library for php projects.

1.3k1.4M54](/packages/casbin-casbin)[2amigos/yii2-usuario

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

298275.5k14](/packages/2amigos-yii2-usuario)[laminas/laminas-permissions-rbac

Provides a role-based access control management

353.4M29](/packages/laminas-laminas-permissions-rbac)

PHPackages © 2026

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