Download the PHP package illusiard/yii2-entity-acl without Composer
On this page you can find all versions of the php package illusiard/yii2-entity-acl. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download illusiard/yii2-entity-acl
More information about illusiard/yii2-entity-acl
Files in illusiard/yii2-entity-acl
Package yii2-entity-acl
Short Description Unix-like ACL + JSON conditions (allow/deny) for entities and records in Yii2
License BSD-3-Clause
Informations about the package yii2-entity-acl
yii2-entity-acl
ACL-система для Yii2 с unix-подобной моделью прав и расширяемыми условиями доступа.
Пакет предназначен для использования совместно с yii2-base-entity-system,
но не имеет жёсткой зависимости от него и может применяться самостоятельно.
Основная цель — дать прозрачную, расширяемую и предсказуемую модель контроля доступа, подходящую для сложных бизнес-сценариев (CRM, SaaS, back-office системы).
Основные принципы
-
Unix-like модель прав
- owner / group / other
- битовые флаги операций
- отдельные правила для сущности и для конкретной записи
-
Allow / Deny conditions
- условия могут как запрещать, так и разрешать доступ
- deny всегда имеет приоритет
- allow может разрешить доступ даже если базовые права запрещают
-
Расширяемость
- subject (кто) — через
SubjectResolverInterface - when (условия) — через handler’ы условий
- storage — через
AclStorageInterface
- subject (кто) — через
- Детерминированный порядок принятия решений
- без неявной магии
- поведение зафиксировано тестами
Операции и флаги
Используются следующие битовые флаги операций:
| Операция | Флаг |
|---|---|
| list | 1 |
| read | 2 |
| create | 4 |
| update | 8 |
| delete | 16 |
| restore | 32 |
| permanentDelete | 64 |
Флаги комбинируются через побитовое OR.
- delete — логическое удаление / деактивация / soft delete
- restore — восстановление после мягкого удаления
- permanentDelete — физическое удаление записи
Таблицы
bes_acl_record
Хранит базовые права доступа.
Используется одна таблица:
- для прав на сущность (
record_id IS NULL) - для прав на конкретную запись (
record_id = <id>)
Основные поля:
entityrecord_id(NULL = правило для сущности)owner_flagsgroup_flagsother_flagsowner_idgroup_idpriority
bes_acl_condition
Хранит дополнительные условия доступа.
Основные поля:
entityrecord_id(NULL = условие для сущности)effect(allow/deny)ops_masksubject_jsonwhen_jsonpriorityenabled
Порядок принятия решения
Для запроса доступа выполняются шаги:
-
Определение операции
- операция переводится в битовую маску
-
Базовое правило (
bes_acl_record)- сначала ищется правило для конкретной записи
- если нет — правило для сущности
- определяется сегмент: owner / group / other
- проверяются флаги
-
Conditions (
bes_acl_condition)- выбираются все условия для операции
- применяются record-level и entity-level условия
- проверяются
subjectиwhen - если сработал deny → доступ запрещён
- если сработал allow → доступ разрешён
- Итог
- allow condition
- иначе base allow
- иначе deny (по умолчанию)
Deny всегда имеет приоритет над allow и base-правами.
Subject (кто)
Subject описывает, к кому применяется условие.
Пример subject_json:
Поддерживаемые ключи (по умолчанию):
userIdgroupIdownerId
Разрешение этих значений выполняется через SubjectResolverInterface.
SubjectResolverInterface
Дефолтная реализация (ContextSubjectResolver) читает значения из AccessRequest->context.
When (когда)
When описывает условия времени/контекста, при которых правило применяется.
Пример when_json:
Поддержка условий реализована через handler’ы:
Ссылки на другие условия
Допускается ссылка на другие conditions:
Все указанные условия должны выполниться (логика AND).
Кеширование
DbAclStorage использует in-memory кеш на время запроса:
- ACL записи
- список conditions
- conditions по id
Это позволяет вызывать can() много раз без повторных запросов к БД.
Использование
Тесты
Логика ACL полностью покрыта unit-тестами:
- порядок применения правил
- приоритет deny / allow
- entity-level vs record-level
- subject-resolver
- conditions
Тесты являются частью спецификации поведения.
Статус
Пакет предоставляет стабильное ядро ACL. UI, редакторы правил и визуализация намеренно не входят в состав и должны реализовываться на уровне клиентского кода или других пакетов.
Лицензия
BSD 3-Clause