不同角色的不同默认路由

时间:2012-11-08 12:07:57

标签: asp.net-mvc

是否可以为其他用户角色创建不同的默认路由?

e.g。

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

            routes.MapRoute(
                "Admin", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "totalrewardstatement", action = "Details", id = UrlParameter.Optional } // Parameter defaults
            );

        }

普通用户具有上述默认路由,但是如果管理员用户登录,则使用管理员路由?

2 个答案:

答案 0 :(得分:1)

MVC不支持基于角色的路由。你所做的是有默认控制器,它检查角色并重定向到该控制器

public ActionResult Index()
    {

        if (User.IsInRole("Supervisor"))
        {
            return RedirectToAction("Index", "InvitationS");
        }
        return View();
    }

http://forums.asp.net/t/1994888.aspx?role+based+routing+asp+net+mvc

答案 1 :(得分:1)

在mvc 5上使用自定义 RouteConstraint 为我做了诀窍。

    public class RoleConstraint : IRouteConstraint
    {
        public bool Match
            (
                HttpContextBase httpContext,
                Route route,
                string parameterName,
                RouteValueDictionary values,
                RouteDirection routeDirection
            )
        {
            return httpContext.User.IsInRole(parameterName) ;
        }
    }

RouteConfig.cs

    routes.MapRoute(
        name: "Reader_Home",
        url: "",
        defaults: new { controller = "Reader", action = "Index", id = UrlParameter.Optional },
        constraints: new { reader_role = new RoleConstraint() }
    );

    routes.MapRoute(
        name: "Author_Home",
        url: "",
        defaults: new { controller = "Publication", action = "Index", id = UrlParameter.Optional },
        constraints: new { author_role = new RoleConstraint() }
    );

我使用parameterName(author_role和reader_role)作为角色名称来检查简化。