我想使用AuthorizeAttribute来控制允许哪些用户访问我的操作。我只是想澄清我的逻辑是有序的。
物质的正常流动是什么?我知道我可以继承MembershipProvider,但我不需要那里的所有功能,实际上只能用两个不同的角色登录。
答案 0 :(得分:4)
你必须将IPrincipal存储在某个地方,并在每次请求时恢复它。如果您将使用FormsAuthentication,这是一个很好的解决方案:
ASP.NET 2.0 Forms authentication - Keeping it customized yet simple
你可以在这里找到其他解决方案:
Where to store logged user information on ASP.NET MVC using Forms Authentication?
并且可以解决许多其他StackOverflow问题:)
修改强>
关于MyBusinessLayerSecurityClass.CreatePrincipal(id,id.Name):
您应该阅读本页:
http://msdn.microsoft.com/en-us/library/aa480476.aspx
特别是:
在 的 FormsAuthenticationModule 强> class构造一个 的的GenericPrincipal 强> 对象并将其存储在HTTP中 上下文。该 的的GenericPrincipal 强> 对象持有对a的引用 的 FormsIdentity 强> 表示当前的实例 认证用户。你应该允许 表单身份验证来管理这些 为你完成的任务。如果您的申请 有具体要求,如 设置用户 属性到自定义类 实现 IPrincipal 界面, 你的申请应该处理 的 PostAuthenticate 强> 事件。该 的 PostAuthenticate 强> 事件发生在 的 FormsAuthenticationModule 强> 已验证表单身份验证 cookie并创建了 GenericPrincipal 和 的 FormsIdentity 强> 对象。在此代码中,您可以 构建一个自定义 IPrincipal 对象 包裹着 FormsIdentity 对象, 然后将其存储在 HttpContext。用户 属性。
在设置身份验证Cookie后会自动管理FormsIdentity。您所要做的就是将其包装在您的IPrincipal中。所有这些都发生在HttpContext.Current.User属性不为空时(它是GenericPrincipal,你很快就会替换它)。当HttpContext.Current.User为null时,之前没有创建任何身份验证cookie,并且用户未经过身份验证。
答案 1 :(得分:2)
我认为以下更为典型: