以下是我要做的事情: 我在ASP.NET MVC中实现了表单身份验证。我有符合IPrincipal(System.Security.Principal)的IUser接口。自定义IUser具有其他属性,可以视为DTO。我需要在不同的层中使用此用户。
目前,我的基本控制器会检查表单是否经过身份验证,并按照代码1重新构建IUser。我将此当前用户传递给服务层,服务层将它们传递给域层,然后它将转到事件和事件处理程序(域事件)。
所有图层都是基于接口的,而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()
};
答案 0 :(得分:0)
For<IUser>().HybridHttpOrThreadLocalScoped().Use( container => {
buildUserInstanceFromThreadCurrentPrincipal();
});