Получение текущего принципала за пределами веб-уровня

У меня есть следующее приложение ntier :MVC > Services > Repository > Domain. Я использую аутентификацию с помощью форм. Безопасно ли использовать Thread.CurrentPrincipal за пределами моего уровня MVC, чтобы получить текущего пользователя моего приложения, вошедшего в систему, или мне следует использовать HttpContext.Current.User?

Причина, по которой я спрашиваю, заключается в том, что, похоже, есть некоторые проблемы с Thread.CurrentPrincipal, но я с осторожностью добавляю ссылку на System.Web за пределами моего уровня MVC на случай, если в будущем мне понадобится предоставить не веб-шрифт.

Обновление

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

  1. Передайте весь HttpContext.Current.User в качестве параметра, а не только имя пользователя.
  2. Вызовите Thread.CurrentPrincipal за пределами моего веб-уровня и используйте его. Но как мне убедиться, что он равен HttpContext.Current.User?
  3. Придерживайтесь передачи имени пользователя, как было предложено до сих пор, а затем используйте Roles.IsUserInRole. Проблема с этим подходом заключается в том, что для него требуется ссылка на System.Web, которая, как мне кажется, неверна за пределами моего уровня MVC.

Как бы вы предложили мне действовать?

8
задан James 10 August 2012 в 08:59
поделиться