Вот что я пытаюсь сделать: я реализовал проверку подлинности формы в ASP.NET MVC.У меня есть интерфейс IUser, который соответствует IPrincipal (System.Security.Principal).Пользовательский IUser имеет дополнительные свойства и может рассматриваться как DTO.Мне нужно использовать этого пользователя в разных слоях.
В настоящее время мой базовый контроллер проверяет, прошла ли проверка подлинности формы, и восстанавливает IUser, как в коде 1 .Я передаю этого текущего пользователя на сервисный уровень, который передает их на доменный уровень, а затем он попадает в события и обработчики событий (доменные события).
Все уровни основаны на интерфейсе, а StructureMap используется в качестве IoC.Мой IoC - это отдельная библиотека классов.
Я ищу способ избежать передачи пользовательской информации каждому методу.Я обнаружил, что могу добавить пользовательский экземпляр класса, как описано в ссылке http://structuremap.net/structuremap/InstanceExpression.htm#section11
. Я планирую создать метод
public void SetCurrentUser(IUser user)
{
// Something Similart to below ( Below code may be wrong)
//For<IUser>().TheDefault.IsThis(user);
}
, а
иметь IUser во всехконструкторы классов, которые должны знать о текущем пользователе
Вопросы
1) это правильный способ передачи информации о пользователях во все слои, и вы думаете, что она будет работать.
2) Безопасно ли это, может ли пользователь в одном сеансе быть угнан из другого сеанса?
Спасибо,
Мар
Код (1)
string[] roles = userData.Split(',');
// Create a new Generic Principal Instance and assign to Current User
IUser _currentUser= new User
{
IsApplicationUser = Convert.ToBoolean(roles[0].ToString()),
Role = (UserRole)Enum.Parse(typeof(UserRole), roles[1].ToString()),
Id = new Guid(ticket.Name),
Email = roles[3].ToString(),
Name = roles[2].ToString(),
CompanyName = roles[4].ToString(),
DealerId = roles[5].ToString(),
LocationId = roles[6].ToString()
};