【问题标题】:MVC RoleProvider and Authorize attributeMVC RoleProvider 和 Authorize 属性
【发布时间】:2011-06-07 13:12:28
【问题描述】:

我已经实现了自己的角色提供者,我没有使用默认的角色提供者。它的工作原理是它可以判断某人何时应该或不应该能够查看页面。

但是,它可以做到以下几点:

  1. 如果用户未登录,请重定向到我的登录页面
  2. 如果用户已登录但没有正确的角色,请重定向到其他页面

我还没有弄清楚如何使用 Authorize 属性来做到这一点,我只有:

[Authorize(Roles="Admin")]

基本上我需要根据授权失败的部分重定向到不同的页面。

我查看了它是否是 web.config 中的内容,但没有明显的跳出。

【问题讨论】:

    标签: c# asp.net-mvc-2


    【解决方案1】:

    VoodooChild 回答 #1。

    对于#2 -

    您可以做的是检查用户是否登录到登录页面并显示不同的消息或完全不同的页面(甚至重定向到不同的操作)。

    您也可以创建自己的授权属性。这将要求您在任何地方都使用此属性,而不是默认的 AuthorizeAttribute

    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAuthenticated)
            {
                filterContext.Result = new RedirectToRouteResult(
                                   new RouteValueDictionary 
                                   {
                                       { "action", "ActionName" },
                                       { "controller", "ControllerName" }
                                   });
            }
            else
                base.HandleUnauthorizedRequest(filterContext);
        }
    }
    

    更新:

    只是想到了另一种方法。当从另一个页面重定向到login 页面时,还会传递一个查询字符串ReturnUrl。因此,您还可以检查它是否包含某些内容并且用户已通过身份验证,用户可能没有查看该页面的权限。

    【讨论】:

    • +1。不知道CustomAuthorizeAttribute,将不得不尝试一下。
    【解决方案2】:

    在我的脑海中,如果您使用 FormsAuthentication 那么回答您的第一个问题 - 是的 如果用户未经过身份验证或登录,则可以将其重定向到登录页面:

    确保你在 web.config 文件中有这个(不确定你是否需要除此之外的任何东西,会调查它..)

    <authentication mode="Forms">
      <forms loginUrl="~/AccountController/LogOn" timeout="2880" />
    </authentication>
    

    回答您的第二个问题:“如果用户已登录但没有正确的角色,请重定向到其他页面”

    我们这样做的方式是,我们使用System.Web.Security.Roles.GetRolesForUser(username); 方法来获取角色,并基于此在登录后将用户重定向到正确的视图。

    希望这会有所帮助!

    【讨论】:

    • 我相信如果用户没有适当的角色来查看操作,用户也会被重定向到登录页面。
    • @Omar 这是正确的,如果您已经登录,这有点奇怪。我想我可以在登录页面上添加重定向检查,但这会感觉很脏。
    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多