PHP: архитектура механизма контроля доступа - PullRequest
4 голосов
/ 11 ноября 2010

У меня есть PHP-приложение, которое имеет механизм контроля доступа, основанный на идентификаторах навигации отдельных страниц.Таким образом, пользователь может иметь доступ к страницам 1, 4, 5, например.Navigation-id не являются статичными, новые страницы (и, следовательно, новые nav-id) могут генерироваться пользователем-администратором.И у меня есть какая-то сервис-ориентированная архитектура.Так что у меня есть сервисы, которые вызываются из клиента JSON, а также со стороны сервера напрямую из PHP-классов (контроллеров).Проблема в том, что мне нужен механизм контроля доступа к сервисам.И я бы хотел отделить его от самих сервисов.

Сервисы возвращают бизнес-объекты.Все эти BO имеют некоторую «связь» с объектом, который имеет идентификатор навигации.например, сервис возвращает изображения: Image.page -> Page.navID или сервис возвращает измерения (nn): Dimension -> DimImageConnector -> Image.page -> Page.navID.

Я не могу представить себе чистое решение для проверки прав доступа.Поиск идентификатора навигации в бизнес-объектах представляется не очень хорошим и простым решением.

Было бы неплохо получить некоторые сведения для моей архитектуры управления доступом.

Спасибо!

Кстати: я использую структуру аннотаций, поэтому одна из возможностей - указать некоторую информацию о доступе прямо методом сервиса.

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Моя идея немного сложна для реализации, но я думаю, что она решает проблему. У вас есть одна проблема с вашим запросом, и это то, что он не отделен от сервисов как таковых.

Представь себе эту идею. У вас есть базовый класс обслуживания с методом IsCallable, возвращающим, если текущий пользователь может вызвать службу.

От того класса обслуживания, который вы наследуете, NonAuthenticatedService и AuthenticatedService. После этого вам нужно только создать фабрику сервисов, чтобы получать сервисы и вызывать их.

Здесь я оставляю графическое представление о моих проблемах. Извините за графику, это просто Power Point, потому что я не фанат CASE Tools. :)

Sample Hierarchy

Надеюсь, я смогу помочь!

0 голосов
/ 12 ноября 2010

Если навигационные идентификаторы меняются, а разрешения основаны на навигационных идентификаторах, вам придется заново сопоставлять все навигационные идентификаторы при каждом их изменении.

Вероятно, самый простой способ - это иметь таблицу, котораясопоставляет пользователей со страницами (не с навигационными идентификаторами).Вы можете изменить то, что у вас есть, или создать новую таблицу.Затем создайте другую таблицу, которая отображает страницы на их текущий nav-id.Чтобы проверить, есть ли у пользователя доступ, вы объединяете две таблицы.

Затем все, что вам нужно сделать, это обновить таблицу сопоставления при каждом изменении идентификаторов nav.

Я бы порекомендовал исследовать метод.по которому навигационные идентификаторы не будут меняться.Или добавьте статический идентификатор для использования с nav-id.Таким образом, вы можете просто ссылаться на статические идентификаторы и позволять навигационным идентификаторам изменяться столько, сколько они хотят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...