Martin McMahon
Martin McMahon

Reputation: 333

Different default routes for different roles

Is it possible to create a different default route for a different user role?

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
            );

        }

Have the default route above for normal users but use the admin one if an admin user logs in?

Upvotes: 4

Views: 4649

Answers (2)

Ketho Runnebaum
Ketho Runnebaum

Reputation: 31

Using a custom RouteConstraint did the trick for me on mvc 5.

    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() }
    );

I'm using the parameterName (author_role and reader_role) as the role name to check for simplification.

Upvotes: 3

Durlove Roy
Durlove Roy

Reputation: 217

Role based routing is not supported in MVC. What you do is have default controller which checks for the roles and redirect to that controller

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

Upvotes: 3

Related Questions