Вопрос по дизайну о SPSecurity.RunWithElevatedPriviledges в многоуровневом дизайне - PullRequest
2 голосов
/ 19 ноября 2009

У меня вопрос re: производительность и дизайн. Суть проблемы заключается в следующем: нужно ли оборачивать RunWithElevatedPriviledges вокруг последовательности методов, все из которых требуют его использования (но вызов находится на неправильном уровне), я вызываю его каждый раз в соответствующем позже.

Я выполняю рефакторинг кода, который изначально имел 2 слоя (интерфейс и база данных).

Я теперь разделил это на 4 слоя

  • Front-end (Sharepoint)
  • Сервис-слой
  • Уровень доступа к данным
  • База данных

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

Для каждого вызова данных мне придется иметь повышенные привилегии. На мой взгляд, это должно происходить на уровне сервиса. FE не должен иметь никакого представления об этом требовании, равно как и уровень доступа к данным. Однако сервисный уровень вызывается несколько раз для заполнения серии выпадающих списков

т.е.

userlistbox.datasource = MyService.GetUsers(); //Returns an iEnumerable object
citylistbox.datasource = MyService.GetCities(currentRegion); //Returns an iEnumerable object

и т.д.

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

Мысли? И, пожалуйста, не ломайте ограничения, с которыми я ничего не могу поделать.

1 Ответ

1 голос
/ 19 ноября 2009

Лучше в слое Service, чем во Front End. Может быть, вы могли бы передать SPSecurity.CodeToRunElevated Delegate?

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.codetorunelevated.aspx

...