PHPackages                             dfiks/unperm - 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. dfiks/unperm

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

dfiks/unperm
============

A Laravel 12 package for Permissions.

v0.0.18-alpha(7mo ago)023MITPHPPHP ^8.2

Since Oct 3Pushed 7mo agoCompare

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

READMEChangelogDependencies (11)Versions (16)Used By (0)

UnPerm - Laravel Permissions Package
====================================

[](#unperm---laravel-permissions-package)

Пакет для управления разрешениями в Laravel с поддержкой UUID и битовых масок для быстрой проверки прав доступа.

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

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

```
composer require dfiks/unperm
```

Опубликуйте конфигурацию и миграции:

```
php artisan vendor:publish --tag=unperm-config
php artisan vendor:publish --tag=unperm-migrations
```

Выполните миграции:

```
php artisan migrate
```

Базовое использование
---------------------

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

### Добавление trait к модели

[](#добавление-trait-к-модели)

Добавьте trait `HasPermissions` к любой модели (например, User):

```
use DFiks\UnPerm\Traits\HasPermissions;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasPermissions;

    // ...
}
```

### Создание Actions, Roles и Groups

[](#создание-actions-roles-и-groups)

```
use DFiks\UnPerm\Models\Action;
use DFiks\UnPerm\Models\Role;
use DFiks\UnPerm\Models\Group;

// Создание действий
$createAction = Action::create([
    'name' => 'Create Post',
    'slug' => 'create-post',
    'description' => 'Can create posts',
    'bitmask' => 1  'Edit Post',
    'slug' => 'edit-post',
    'description' => 'Can edit posts',
    'bitmask' => 1  'Editor',
    'slug' => 'editor',
    'description' => 'Content editor role',
]);

// Назначение действий роли
$editorRole->actions()->attach([$createAction->id, $editAction->id]);

// Синхронизация битовой маски роли
$editorRole->syncBitmaskFromActions()->save();

// Создание группы
$contentGroup = Group::create([
    'name' => 'Content Managers',
    'slug' => 'content-managers',
    'description' => 'Content management group',
]);

// Назначение ролей группе
$contentGroup->roles()->attach($editorRole->id);

// Синхронизация битовой маски группы
$contentGroup->syncBitmaskFromRolesAndActions()->save();
```

### Назначение разрешений пользователю

[](#назначение-разрешений-пользователю)

```
$user = User::find(1);

// Назначение действия
$user->assignAction('create-post');
$user->assignAction($createAction);

// Назначение нескольких действий
$user->assignActions(['create-post', 'edit-post']);

// Назначение роли
$user->assignRole('editor');
$user->assignRole($editorRole);

// Назначение группы
$user->assignGroup('content-managers');
$user->assignGroup($contentGroup);

// Синхронизация (заменяет все текущие)
$user->syncActions(['create-post', 'edit-post']);
$user->syncRoles(['editor']);
$user->syncGroups(['content-managers']);

// Удаление
$user->removeAction('create-post');
$user->removeRole('editor');
$user->removeGroup('content-managers');
```

### Проверка разрешений

[](#проверка-разрешений)

```
// Проверка действия
if ($user->hasAction('create-post')) {
    // Пользователь может создавать посты
}

// Проверка роли
if ($user->hasRole('editor')) {
    // Пользователь имеет роль редактора
}

// Проверка группы
if ($user->hasGroup('content-managers')) {
    // Пользователь в группе менеджеров контента
}

// Проверка любого из действий
if ($user->hasAnyAction(['create-post', 'edit-post'])) {
    // Пользователь может создавать или редактировать посты
}

// Проверка всех действий
if ($user->hasAllActions(['create-post', 'edit-post'])) {
    // Пользователь может и создавать, и редактировать посты
}
```

### Использование битовых масок

[](#использование-битовых-масок)

```
// Быстрая проверка через битовую маску
if ($user->hasPermissionBit(0)) {
    // У пользователя есть разрешение с битом 0
}

// Проверка полной битовой маски
$requiredMask = (1 getPermissionBitmask();
```

### Использование PermissionChecker Service

[](#использование-permissionchecker-service)

```
use DFiks\UnPerm\Facades\UnPerm;

$user = User::find(1);
$action = Action::where('slug', 'create-post')->first();

// Проверка, может ли модель выполнить действие
if (UnPerm::modelCan($user, 'create-post')) {
    // Разрешено
}

if (UnPerm::modelCan($user, $action)) {
    // Разрешено
}

// Проверка битов
if (UnPerm::modelHasBit($user, 0)) {
    // У пользователя есть бит 0
}

if (UnPerm::modelHasAllBits($user, $requiredMask)) {
    // У пользователя есть все требуемые биты
}
```

Работа с битовыми масками
-------------------------

[](#работа-с-битовыми-масками)

Битовые маски позволяют очень быстро проверять базовые разрешения без обращения к БД:

```
// Установка битов в Action
$action->setBit(0)->save();
$action->setBit(1)->save();

// Проверка битов
if ($action->hasBit(0)) {
    // бит установлен
}

// Работа с масками
$action->setBits(0b1111); // устанавливает несколько битов
$action->unsetBits(0b0010); // снимает несколько битов
$action->toggleBit(2); // переключает бит

// Проверка нескольких битов
if ($action->hasAllBits(0b0011)) {
    // Биты 0 и 1 установлены
}

if ($action->hasAnyBits(0b0110)) {
    // Хотя бы один из битов 1 или 2 установлен
}
```

Архитектура
-----------

[](#архитектура)

### Таблицы

[](#таблицы)

- `actions` - действия (create, edit, delete и т.д.)
- `roles` - роли (admin, editor, viewer и т.д.)
- `groups` - группы (content-managers, developers и т.д.)
- `roles_action` - связь ролей с действиями
- `groups_action` - связь групп с действиями
- `groups_roles` - связь групп с ролями
- `model_actions` - полиморфная связь моделей с действиями
- `model_roles` - полиморфная связь моделей с ролями
- `model_groups` - полиморфная связь моделей с группами

### Иерархия проверки

[](#иерархия-проверки)

1. **Быстрая проверка**: Сначала проверяется битовая маска (очень быстро)
2. **Прямые действия**: Проверяются действия, назначенные напрямую модели
3. **Роли**: Проверяются действия через роли модели
4. **Группы**: Проверяются действия через группы модели

Лицензия
--------

[](#лицензия)

MIT

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance63

Regular maintenance activity

Popularity6

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

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

Total

15

Last Release

227d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5e29c00ccad7d044815ca60fbc0b3c80eae092bcc12dc94586a37fe9d87f63aa?d=identicon)[dfiks](/maintainers/dfiks)

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/dfiks-unperm/health.svg)

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

###  Alternatives

[tymon/jwt-auth

JSON Web Token Authentication for Laravel and Lumen

11.5k49.1M350](/packages/tymon-jwt-auth)[php-open-source-saver/jwt-auth

JSON Web Token Authentication for Laravel and Lumen

8359.8M53](/packages/php-open-source-saver-jwt-auth)[illuminate/auth

The Illuminate Auth package.

9327.3M1.0k](/packages/illuminate-auth)[josiasmontag/laravel-recaptchav3

Recaptcha V3 for Laravel package

2641.6M2](/packages/josiasmontag-laravel-recaptchav3)[spatie/laravel-export

Create a static site bundle from a Laravel app

646127.9k5](/packages/spatie-laravel-export)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

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