Хроники Yii3
622 subscribers
43 photos
1.7K links
Описание процесса разработки фреймворка из первых рук 😎

Обсуждение:
https://yangx.top/yii3ru

Сводка по всем пакетам:
https://www.yiiframework.com/status/3.0

Поддержать разработчиков:
https://opencollective.com/yiisoft
加入频道
⚡️ #yiisoftRbacPhp

Исправили ошибку, возникающую при использовании числовых ID пользователя в пакете Yii RBAC PHP File Storage (commit).
⚡️ #yiisoftRbac #yiisoftRbacPhp

Выполнили рефакторинг интерфейса хранилища назначений ролей/прав пользователям AssignmentsStorageInterface в пакете Yii Role-Based Access Control (PR):

• сделали более консистентные и понятные имена методов;

• в аргументах методов заменили объекты ролей/прав на их имена.

Соответствующим образом изменили реализацию хранилища в Yii RBAC PHP File Storage (PR).
⚡️ #yiisoftRbac #yiisoftRbacPhp #yiisoftDemo

Продолжаем рефакторинг Yii Role-Based Access Control (PR).

RolesStorageInterface переименован в ItemsStorageInterface, а также переименованы методы:
getItems()getAll()
getItemByName()
get()
addItem()
add()
updateItem()
update()
removeItem()
remove()
getChildren()
getAllChildren()
getRoleByName()
getRole()
getPermissionByName()
getPermission()
getChildrenByName()
getChildren()
getRuleByName()
getRule()

• В методах removeChildren(), removeChild(), addChild() и remove() интерфейса ItemsStorageInterface в качестве аргументов вместо объектов элементов RBAC теперь используются их имена.

• В интерфейсе AssignmentsStorageInterface переименованы методы:
getUserAssignments()getByUserId()
removeUserAssignments()
removeByUserId()
removeItemAssignments()
removeByItemName()

• В методах get(), add() и remove() интерфейса AssignmentsStorageInterface изменён порядок методов:
string $userId, string $itemNamestring $itemName, string $userId

• В RBAC-менеджере Manager объекты элементов RBAC заменены на их имена в качестве аргументов в следующих методах:
canAddChild()
addChild()
removeChild()
removeChildren()
hasChild()
assign()
revoke()
removeRole()
removePermission()

• В RBAC-менеджере Manager переименованы методы:
getUserIdsByRole()getUserIdsByRoleName()
getPermissionsByUser()
getPermissionsByUserId
getPermissionsByRole()
getPermissionsByRoleName()
getRolesByUser()
getRolesByUserId()

• Исправлена ошибка в методе Manager::getDefaultRoles(): теперь возвращаются роли из хранилища, а не создаются новые.

Соответствующие изменения внесены в Yii RBAC PHP File Storage (PR) и демо веб-приложения (PR).
👍4
⚡️ #yiisoftRbac #yiisoftRbacPhp

В интерфейсе ItemsStorageInterface пакета Yii Role-Based Access Control заменили метод getAllChildren() на getParents() (PR).

Соответствующим образом адаптировали хранилище Yii RBAC PHP File Storage (PR).
⚡️ #yiisoftRbac #yiisoftRbacPhp #yiisoftDemo
#yiisoftRbacRulesContainer

Переработали хранение и создание правил в пакете Yii Role-Based Access Control (PR). Теперь правила НЕ сохраняются в хранилище, а создаются с помощью абстрактной фабрики RuleFactoryInterface. Это позволило существенно упростить код:

- из хранилища ItemsStorageInterface удалены все методы, касающиеся правил;

- у правил теперь нет имён и соответственно удалён метод getName();

- удалён абстрактный класс Rule, так как он был нужен только для удобства работы с именем правила.

Вместо фабрики ClassNameRuleFactory в новом пакете Yii RBAC Rules Container создан контейнер правил RulesContainer (реализует интерфейс RuleFactoryInterface), позволяющий задавать конфигурацию правил с помощью синтаксиса Yii Definitions и использовать любой PSR-11 контейнер для разрешения зависимостей.

К этим изменениям адаптированы хранилище Yii RBAC PHP File Storage (PR) и демо веб-приложения (PR).
👍1
⚡️ #yiisoftRbacPhp

Доработали Yii RBAC PHP File Storage (PR):

• исправлена ошибка: некорректно обновлялись дочерние элементы при обновлении элемента;

• версия экшена actions/cache в GitHub Actions поднята до 3;

• немного улучшены doc-блоки.
👍1
⚡️ #yiisoftRbac #yiisoftRbacPhp

В пакете Yii Role-Based Access Control при добавлении роли или разрешения добавили проверку на существование в хранилище роли или разрешения с таким именем (PR).

Если роль или разрешение уже существуют (даже если добавляется роль, а существует разрешение, и наоборот), то будет брошено исключение ItemAlreadyExistsException.

Для проверки существования роли или разрешения был добавлен метод exists() в интерфейсе ItemsStorageInterface.

Новый метод уже реализован в пакете Yii RBAC PHP File Storage (PR).
👍1
#yiisoftRbac #yiisoftRbacPhp #yiisoftRbacRulesContainer #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii Role-Based Access Control 1.0.0

Библиотека для управления доступом на основе ролей (RBAC).

• Гибкая иерархия ролей, разрешений и правил.

• Наследование ролей и разрешений.

• Интерфейсы для хранилищ и фабрики правил.

• Возможность использовать разные хранилища для связки ролей с пользователями и иерархии ролей/разрешений.

• Удобное API для управления иерархией ролей/разрешений.


🎁 Yii RBAC PHP File Storage 1.0.0

Реализация хранилища для связки ролей с пользователями и иерархии ролей/разрешений на основе PHP-файлов.


🎁 Yii RBAC Rules Container 1.0.0

Фабрика для создания объектов правил RBAC на базе Yii Factory с использованием синтаксиса Yii Definition. Правила создаются один раз и кэшируются, при последующих запросах возвращается тот же экземпляр.
🔥6👍2
⚡️ #yiisoftAccess #yiisoftErrorHandler #yiisoftEventDispatcher #yiisoftFactory #yiisoftHttp #yiisoftI18n #yiisoftAliases #yiisoftJson #yiisoftProfiler #yiisoftInjector #yiisoftMailerSymfony #yiisoftMutex #yiisoftRateLimiter #yiisoftNetworkUtilities #yiisoftSession #yiisoftRouter #yiisoftStrings #yiisoftRouterFastroute #yiisoftRequestBodyParser #yiisoftTranslatorMessageGettext #yiisoftTranslatorExtractor #yiisoftTranslatorFormatterSimple #yiisoftTranslator #yiisoftTranslatorFormatterIntl #yiisoftTranslatorMessageDb #yiisoftUser #yiisoftVarDumper #yiisoftViewTwig #yiisoftYiiEvent #yiisoftTranslatorMessagePhp #yiisoftDataResponse #yiisoftCacheFile #yiisoftCookies #yiisoftCsrf #yiisoftAssets #yiisoftAuthJwt #yiisoftLog #yiisoftArrays #yiisoftYiiFilesystem #yiisoftYiiHttp #yiisoftYiiRunnerHttp #yiisoftLogTargetFile #yiisoftLogTargetEmail #yiisoftYiiRunnerRoadrunner #yiisoftSecurity #yiisoftYiiSwagger #yiisoftYiiSentry #yiisoftMutexFile #yiisoftMiddlewareDispatcher #yiisoftTestSupport #yiisoftYiiDebug #yiisoftYiiDebugViewer #yiisoftCacheApcu #yiisoftYiiDataview #yiisoftLogTargetSyslog #yiisoftAuth #yiisoftDefinitions #yiisoftRbacPhp #yiisoftDataDb #yiisoftData #yiisoftRequestModel #yiisoftDi #yiisoftConfig #yiisoftRbacRulesContainer

Продолжаем заменять рабочие процессы на переиспользуемые из Yii GitHub Actions:

- Yii Access (PR)
- Yii Error Handler (PR)
- Yii Event Dispatcher (PR)
- Yii Factory (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Aliases (PR)
- Yii JSON (PR)
- Yii Profiler (PR)
- Yii Injector (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Mutex (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Network Utilities (PR)
- Yii Session (PR)
- Yii Router (PR)
- Yii Strings (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Request Body Parser (PR)
- Yii Translator gettext Message Storage (PR)
- Yii Message Extractor (PR)
- Yii Translator Simple Message Formatter (PR)
- Yii Message Translator (PR)
- Yii Translator intl Message Formatter (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii VarDumper (PR)
- Yii View Twig Renderer (PR)
- Yii Event (PR)
- Yii Translator PHP Message Storage (PR)
- Yii Data Response (PR)
- Yii Cache File Handler (PR)
- Yii Cookies (PR)
- Yii CSRF Protection Library (PR)
- Yii Assets (PR)
- Yii Auth JWT (PR)
- Yii Logging Library (PR)
- Yii Arrays (PR)
- Yii Filesystem (PR)
- Yii HTTP Application (PR)
- Yii HTTP Runner (PR)
- Yii Logging File Target (PR)
- Yii Logging Email Target (PR)
- Yii RoadRunner Runner (PR)
- Yii Security (PR)
- Yii Swagger (PR)
- Yii Sentry (PR)
- Yii Mutex File Driver (PR)
- Yii Middleware Dispatcher (PR)
🤯6👍5
⚡️ #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftHttp #yiisoftI18n #yiisoftLog #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftMailerSymfony #yiisoftMiddlewareDispatcher #yiisoftMutexPdoOracle #yiisoftMutexRedis #yiisoftRbac #yiisoftRbacDb #yiisoftRbacPhp #yiisoftRequestBodyParser #yiisoftRateLimiter #yiisoftProxy #yiisoftProfiler #yiisoftMutexPdoPgsql #yiisoftMutexPdoMysql #yiisoftMailerSwiftmailer #yiisoftHtml #yiisoftRequestModel #yiisoftRequirements #yiisoftRouter #yiisoftRouterFastroute #yiisoftSession #yiisoftStrings #yiisoftTestSupport #yiisoftTranslator #yiisoftTranslatorMessageDb #yiisoftUser #yiisoftView #yiisoftViewTwig #yiisoftWidget #yiisoftYiiConsole

Сделали изменения в стили кода. Методы, вызываемые «цепочкой», перенесли на новую строку:

- Yii Mailer Library (PR)
- Yii Logging Syslog Target (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Logging Library (PR)
- Yii Logging DB Target (PR)
- Yii Logging Email Target (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Middleware Dispatcher (PR)
- Yii Mutex Oracle PDO Driver (PR)
- Yii Mutex Redis Driver (PR)
- Yii Role-Based Access Control (PR)
- Yii RBAC Database (PR)
- Yii RBAC PHP File Storage (PR)
- Yii Request Body Parser (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Proxy (PR)
- Yii Profiler (PR)
- Yii Mutex PostgreSQL PDO Driver (PR)
- Yii Mutex MySQL PDO Driver (PR)
- Yii Mailer SwiftMailer Extension (PR)
- Yii HTML (PR)
- Yii Request Model (PR)
- Yii Requirements Checker (PR)
- Yii Router (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Session (PR)
- Yii Strings (PR)
- Yii Test Support (PR)
- Yii Message Translator (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii View (PR)
- Yii View Twig Renderer (PR)
- Yii Widget (PR)
- Yii Console (PR)
🔥4👍3
#yiisoftRbac #yiisoftRbacPhp #yiisoftRbacCycleDb #yiisoftRbacDb #МажорныйРелиз #МинорныйРелиз #Релиз

Большой релиз RBAC пакетов

RBAC пакеты получили большое обновление:

- 🎁 RBAC 2.0
- 🎁 RBAC PHP Storage 2.0
- 🎁 RBAC Cycle Database Storage 3.0
- 🎁 RBAC Yii Database Storage 2.0
- 🎁 RBAC Rules Container 2.1

Рассказываем, что было исправлено и появилось нового.

Поднятие версии PHP

Подняли минимальную версию PHP во всех RBAC пакетах до 8.1.

Качество кода

Повысили качество кода согласно установленным стандартам во всех пакетах:

- 1й уровень в статическом анализаторе Psalm.
- 100% покрытие кода юнит тестами.
- 100% в мутационном тестировании.

Использование хранилищ через Manager

В предыдущей версии было уделено недостаточное внимание тестированию хранилищ в связке с Manager. Напомним, что
именно через него нужно взаимодействовать с хранилищами, а не напрямую. Были добавлены соответствующие тесты, а также
устранен ряд сопутствующих проблем.

В частности, убрана связность хранилищ (это было более актуально для реализаций на основе БД). То есть теперь можно
полноценно использовать разные комбинации хранилищ, как и задумывалось изначально. Такое было возможно и в Yii 2. Один
из частых кейсов - когда права и роли хранятся в PHP файле (обновляются реже), а назначения - в базе данных (обновляются
чаще).

Также проведена масштабная оптимизация производительности.

Проверка прав доступа

- Исправлена проблема, когда правила не выполнялись для гостей и других элементов в ветви дерева иерархии.
- Теперь можно проверять наличие у пользователя не только прав, но и ролей.
- Право теперь разрешается для пользователя при наличии доступа хотя бы по одной ветви иерархии доступа.

Простые реализации хранилищ

Добавлены простые реализация хранилищ. Главная их особенность - наполнение свойств соответствующего класса при
считывании из хранилищ и дальнейшее продолжение работы уже со свойствами. Помимо полноценного тестирования базового
пакета (он не может быть использован отдельно), это позволило избавиться от повторяющегося кода в PHP реализации (с
соответствующими доработками для конкуретности).

Специфические изменения для разных реализаций хранилищ

Хранилище RBAC PHP

- Добавлена поддержка конкурентности, что может быть полезно при одновременном редактировании файла.
- Исправлены проблемы с сохранением времени создания и редактирования прав / ролей и назначений.
- Немного упростили процесс указания файла при конфигурировании хранилищ.

Сохранена возможность ручного редактирования файла. Заметьте, что в этом случае вам нужно вручную синхронизировать
изменения в другом хранилище. Если предпочтение отдаётся этому способу - опциональные поля можно не указывать, как и
временные метки - в случае их отсутствия будет выполен fallback на дату изменения файла. Дата изменения файла теперь
тоже кастомизируется. Помимо временных меток, её изменение является триггером к обновлению данных при включённом режиме
обработки конкуретности.

Хранилища RBAC Cycle DB & RBAC Yii DB

Оптимизация производительности

Помимо оптимизации в базовом пакете, проведена оптимизация, специфическая для БД.

Миграции

Мы наконец-то определились, как будут выполняться миграции. Решили отказаться от экспериментальных подходов с чистым
SQL, CLI и использовать соответствующие пакеты - Cycle Migrations и
Yii DB Migration (тем более, что последний не так давно получил первую
стабильную версию).

В продолжение темы убирания связности - каждое хранилище получило свой независимый набор миграций. Таким образом, если
вы решите хранить в базе только назначения - то таблицы для элементов даже не будут созданы изначально.

Также была облегчена миграция существующих данных с Yii 2 путём сохранения оригинальных имён свойств сущностей,
насколько это возможно.
🔥23👍3