首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.Net MVC 3如何重定向未经授权的用户不登录?

ASP.Net MVC 3如何重定向未经授权的用户不登录?
EN

Stack Overflow用户
提问于 2018-03-15 01:23:45
回答 2查看 0关注 0票数 0

我有一个项目使用ASP.Net MVC3和角色的成员资格。我在每个控制器中使用授权。例如:

[Authorize(Roles = "Administrator")]
    public ActionResult Index(string q, int i)
    {
      return View(model);
    }

如果某人不具有管理员角色,那么默认情况下它将重定向到登录页面。如何改变它,所以它会重定向到Views / Shared / UnAuthorize.cshtml?或者如果某人不具有管理员角色,它会显示消息框(警告)?

EN

回答 2

Stack Overflow用户

发布于 2018-03-15 10:22:57

只需更改web.config中必须显示的页面(检查路由是否存在)

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

如果你想为每个角色重定向到一个特定的路径,你可以用你自己的扩展AuthorizeAttribute。就像这样

public class CheckAuthorize : ActionFilterAttribute
{
  public Roles[] Roles { get; set; }
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    //Your code to get the user
    var user = ((ControllerBase)filterContext.Controller).GetUser();

    if (user != null)
    {
      foreach (Role role in Roles)
      {
        if (role == user.Role)
          return;
      }
    }      
    RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
    if user.Role==Role.Administrator
    {
      redirectTargetDictionary.Add("action", "Unauthorized");
      redirectTargetDictionary.Add("controller", "Home");
    }
    else
    {
      redirectTargetDictionary.Add("action", "Logon");
      redirectTargetDictionary.Add("controller", "Home");
    }
    filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
  }
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-15 10:38:55

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

public class MyAuthorize : AuthorizeAttribute
{
   protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
   {
     //you can change to any controller or html page.
     filterContext.Result = new RedirectResult("/cpanel/roles/unauthorize");

   }
 }

并将MyAuthorize应用于集体或诉讼:

[MyAuthorize]
public class AdminController :Controller
{
}

就这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档