Где я должен фильтровать записи? - PullRequest
0 голосов
/ 06 августа 2010

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

Мой вопрос: где должна выполняться фильтрация?Должен ли я сделать это на уровне DAL?Или просто вернуть все записи из DAL, а затем выполнить фильтрацию на каком-то другом слое?Я всюду искал лучшие практики в отношении авторизации, но я не нашел ничего, что бы четко объясняло этот аспект.

Ответы [ 2 ]

2 голосов
/ 06 августа 2010

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

Далее

  • Вы не хотите, чтобы ненужные записи тратили трафик между сервером базы данных и клиентским компьютером.
  • Вы не хотите, чтобы ненужные записи занимали память на вашем клиентском компьютере.
  • Вы не хотите, чтобы несанкционированные записи в памяти на вашем клиентском компьютере могли быть взломаны.
0 голосов
/ 06 августа 2010

Ответ на этот вопрос на уровне реализации будет сильно зависеть от ваших инструментов. Это будет .NET, Java, PHP, Python?

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

ОБНОВЛЕНИЕ:

Учитывая .NET и NHibernate, NHibernate является вашим ORM / DAL. В идеале DAL должен быть реализацией репозитория, чтобы вы могли получать данные в вашу базу данных и из нее.

Разработка модели предметной области для обработки отношений между пользователем, ролью и ветвью. Каждый объект связан с другими объектами. «Записи» для этих ветвей также должны быть смоделированы как объекты. Как только ваши отношения установлены в вашей модели, вы можете разрабатывать методы для каждой сущности, которые извлекают связанные сущности. Вы можете считать эту модель своего рода ViewModel или Controller. Его задача состоит в том, чтобы явно реализовать отношения между сущностями, создавая абстракцию «выше» той, что предоставляется NHibernate.

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