ASP.NET MVC 4自定义授权属性 - 如何将未经授权的用户重定向到错误页面?

9 浏览
0 Comments

ASP.NET MVC 4自定义授权属性 - 如何将未经授权的用户重定向到错误页面?

我正在使用自定义的授权属性根据用户的权限级别来授权其访问。我需要将未经授权的用户(例如,用户尝试在没有删除访问级别的情况下删除发票)重定向到访问被拒绝的页面。

自定义属性是有效的。但是在未经授权的用户访问的情况下,浏览器中没有显示任何内容。

控制器代码。

public class InvoiceController : Controller
{
    [AuthorizeUser(AccessLevel = "Create")]
    public ActionResult CreateNewInvoice()
    {
        //...
        return View();
    }
    [AuthorizeUser(AccessLevel = "Delete")]
    public ActionResult DeleteInvoice(...)
    {
        //...
        return View();
    }
    // 更多代码/方法等。
}

自定义属性类代码。

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    // 自定义属性
    public string AccessLevel { get; set; }
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {                
            return false;
        }
        string privilegeLevels = string.Join("", GetUserRights(httpContext.User.Identity.Name.ToString())); // 调用另一个方法从数据库中获取用户的权限
        if (privilegeLevels.Contains(this.AccessLevel))
        {
            return true;
        }
        else
        {
            return false;
        }            
    }
}

如果您能分享您在此方面的经验,我将不胜感激。

0
0 Comments

ASP.NET MVC 4中的自定义授权属性——如何将未授权的用户重定向到错误页面?

在ASP.NET MVC 4中,我们经常需要对用户进行授权,以确保他们只能访问他们被授权的页面。为了实现这一目的,我们可以使用AuthorizeAttribute类来创建自定义授权属性。然而,当用户未经授权尝试访问受保护的页面时,我们可能希望将他们重定向到一个错误页面。

要实现这个功能,我们需要重写AuthorizeAttribute类中的HandleUnauthorizedRequest方法。具体操作如下:

public class CustomAuthorize : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if(!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(new
            RouteValueDictionary(new{ controller = "Error", action = "AccessDenied" }));
        }
    }
}

上述代码中,我们首先检查用户是否已经通过身份验证。如果用户未经身份验证,则调用base.HandleUnauthorizedRequest方法,该方法将默认显示未授权的错误信息。如果用户已经通过身份验证,则将用户重定向到名为"Error"的控制器的"AccessDenied"动作。

需要注意的是,为了确保线程安全性,我们应该使用以下条件语句:

if(false == filterContext.HttpContext.User.Identity.IsAuthenticated)

此外,如果重定向的目标动作需要参数,我们可以通过以下方式将参数传递给该函数:

AccessDenied(string PermissionNeeded)

以上是解决ASP.NET MVC 4中自定义授权属性如何将未授权的用户重定向到错误页面的方法。如果您想了解更多关于此问题的信息,可以参考Ben Cull在stackoverflow上的回答(链接在上方提供)。

0