【发布时间】:2013-08-07 13:17:02
【问题描述】:
我已经实现了自定义方法,让视图可以使用这样的用户信息:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (HttpContext.User != null)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
JavaScriptSerializer serializer = new JavaScriptSerializer();
AWESOMEUser user = serializer.Deserialize<AWESOMEUser>(authTicket.UserData);
if (user == null)
{
HttpContext.User = null;
}
else
{
HttpContext.User = new PlatformUser(typeof(DBMembershipProvider).Name, user);
}
}
else
{
HttpContext.User = null;
}
}
base.OnAuthorization(filterContext);
}
问题是当数据库中的用户信息(尤其是权限)发生更改时,它不会反映在视图中。我是否应该在每次调用时都更新它,因为有更智能的方法,即其他有助于自动更新用户信息的方法?
【问题讨论】:
-
有点难以理解您的意思,但这里有几种方法可以做到这一点。您可以在 POST 事件上调用 OnAuthorization 并更新您的模型(假设是强类型视图)...此外,AJAX 也适用于此。
-
OnAuthorization 在 OnActionExecuting 之前执行。当您运行更新您的授权的操作时,您已经执行了您向我们展示的代码。 POST 请求应该很少返回 HTML 响应。您应该在您的操作中执行您必须执行的操作,然后重定向到 GET 请求。这将解决您的问题并改善您的请求模式。
标签: c# asp.net-mvc