проверка запроса ресурсов, ответственность за обслуживание или бизнес-уровень? - PullRequest
0 голосов
/ 26 января 2011

Предполагается, что у вас есть Business Layer, который вы будете использовать как для внешнего внешнего веб-приложения, так и для внутреннего внутреннего приложения. Внешнее приложение всегда будет содержать имя пользователя / профиль в сеансе. Внутреннее приложение предназначено только для внутренних администраторов.

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

Вопрос в том, как вам достичь этого с максимальным повторным использованием и наилучшим разделением интересов? Включаете ли вы эту проверку в бизнес-уровень, устанавливая какой-либо флаг на уровне класса, который говорит «подтвердите меня» или «не подтвердите меня» в зависимости от того, кто является потребителем. Или вы добавляете свой бизнес-уровень на Service Layer, поручая ему авторизацию запрашиваемых ресурсов. Принуждение внешнего приложения направить запрос через уровень обслуживания, где внутреннее приложение может перейти к Business Layer напрямую?

1 Ответ

2 голосов
/ 27 января 2011

Я думаю, что уровень обслуживания является наиболее естественным местом для процесса авторизации.

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

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