Этого можно добиться, осуществив внешнюю авторизацию и используя стороннюю платформу. На самом деле существует архитектурный подход, называемый управлением доступом на основе атрибутов ( abac ), который позволит вам сделать это. В ABAC:
- вы определяете политику, например
A user with role='X' can do action='view' on object of type='Y' if user.organization==object.organization
- вы определяете атрибуты, которые будете использовать в политиках, например, Роль, отдел, место, организация.
Существует несколько стандартов и пакетов, которые можно использовать для определения собственных политик, таких как XACML, ALFA или OPA (REGO).
Общая архитектура выглядит следующим образом:
- Точка применения политики (PEP): именно здесь ваше приложение интегрируется со службой авторизации. Интеграция может быть PHP-кодом в вашем приложении, вызывающим PDP, или промежуточным программным обеспечением (как вы сказали) или шлюзом API ...
- Точка принятия решения о политике (PDP): здесь политики оцениваются по входящим запросам авторизации. В конечном итоге PDP возвращает решение (Permit / Deny) и, необязательно, дополнительные метаданные, которые PEP должен обработать.
- Информационный пункт политики (PIP): здесь PDP может получить недостающую информацию (например, оценку риска или отдел пользователя) для принятия решения.
Это решение не относится к PHP. Существует специфичная для PHP реализация, которую вы можете найти здесь . В качестве альтернативы рассмотрим AuthZForce (сервис авторизации с открытым исходным кодом) или Axiomatics (коммерческий). Оба могут защищать приложения PHP, а также другие языки.