【发布时间】:2011-04-16 18:19:10
【问题描述】:
这是我想要做的: 我已经在 ASP.NET MVC 中实现了表单身份验证。我有符合 IPrincipal (System.Security.Principal) 的 IUser 接口。自定义 IUser 具有附加属性,可以视为 DTO。我需要在不同的层使用这个用户。
目前,我的基本控制器检查表单是否经过身份验证并重建 IUser,如 Code1。我将此当前用户传递给服务层,服务层将它们传递给域层,然后到达事件和事件处理程序(域事件)。
所有层都是基于接口的,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()
};
【问题讨论】:
-
我能够使用 Joshua Flanagan 的建议成功测试。
标签: asp.net-mvc-2 structuremap n-tier-architecture