Библиотека доступа к данным: что вернуть, если доступ не разрешен или данные не найдены? - PullRequest
1 голос
/ 12 июля 2011

Я создаю DAL для приложения создания отчетов на основе виджетов, оно было разработано таким образом, чтобы пользователи выбирали, настраивали и развертывали «виджеты» отчетов на своих домашних экранах.Виджеты могут создавать отчеты по различным видам данных компании - сайтам, брендам, сотрудникам и т. Д.

Хотя все пользователи могут получать доступ ко всем виджетам / отчетам, все пользователи не имеют прав доступа ко всем данным.Если я работаю в Компании-A, я не могу просматривать отчеты о продажах для Компании-B или данные о посещаемости персонала для продавца в Компании-C, однако я могу настроить такой отчет и добавить его на свою панель инструментов.'.

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

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

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

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

Спасибо за чтение.

1 Ответ

1 голос
/ 12 июля 2011

Я думаю, у вас есть несколько вариантов.Одним из них является создание составного объекта, который возвращает ваш класс обслуживания данных.Составной объект выглядит примерно так: -

class DataResult<T>
{
   IEnumerable<T> Data;
   Result ServiceResult;
}

ServiceResult содержит метаданные о результате вашего вызова службы - это может быть перечисление, которое содержит, например, Success, AuthenticationFailure и т. Д. И т. Д. Затем можно включитьэто для того, чтобы сделать другое поведение.

Альтернативным вариантом может быть использование шаблона NullObject, который показывает один элемент данных в представлении, который вместо реальных данных просто показывает «Отказано в доступе» для свойств отображенияпредмет.Преимущество этого подхода состоит в том, что ваш интерфейс не должен иметь никакой условной логики и т. Д .;однако, если вы хотите показать конкретное окно сообщения или аналогичное, а не просто показ фиктивной строки данных в вашем виджете, то это, вероятно, не подходит.

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