令我感到惊讶的是,我之前从未遇到过这种情况,但是我试图根据用户角色找到一种重定向到默认路由后身份验证的方法。

为了举例说明,假设有两个角色,即Admin和Tester。 管理员的默认路由应为admin/index并且测试人员不能访问AdminController 测试人员的默认路由应为test/index并且Admin不能访问TestController

我研究了路线约束,但显然,它们只能用于确定路线是否有效。 然后,我尝试尝试在登录后调用RedirectToAction ,但是返回URL有点混乱,另一个原因使此刻我什至不记得了。

我已经在BaseController实现了以下内容,但是在每个控制器操作上执行此操作都不是最佳选择:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (filterContext.Controller.GetType() == typeof(TestController) && 
        User.IsInRole("Admin"))
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Admin", action = "Index" }));
    else if (filterContext.Controller.GetType() == typeof(AdminController) && 
        User.IsInRole("Tester"))
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Test", action = "Index" }));
    } 
    else
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
    }
}

是否有最佳实践来处理基于用户角色的默认路由?

#1楼 票数:0

using Microsoft.AspNet.Identity;



[Authrorize]
public class AdminController : Controller{

 /* do your stuff in here. If your View is not actually a big difference from the tester view and you will only Hide some objects from the tester or viceversa, I suggest you use the same View but make a different methods inside the Controller. Actually you don't need to make AdminController and Tester Controller at all. */



}


// you can just do this in one Controller like

[Authorize(Roles="Admin")]
public ActionResult DetailsForAdmin(int id)
{
    var myRole = db.MyModelsAccounts.Find(id);
    return View("Admin", myRole);  //<- Admin returning View
}


[Authorize(Roles="Test")]
public ActionResult DetailsForTester

I think you get the Idea.

  ask by im1dermike translate from so

未解决问题?本站智能推荐:

1回复

默认路由会干扰ASP.MVC中属性路由中的已定义路径

我有一个带有操作方法的控制器,并且已经配置了属性路由: 这是路由配置: 一切正常。 当我导航到http://webPageAddress/foo/将调用我的操作并返回列表。 现在,我想将此路线设置为默认路线。 我添加了新属性,因此: 结果是默认路由( http://webPa
3回复

MVC如何更改默认路由

我正在阅读Pro Asp.net mvc3框架书。 我想更改默认路由,以便可以使用其他主页。 我添加了一个名为Pages的新控制器和一个名为Home的视图。 这就是我想要的主页。 我尝试将其添加到我的global.asax.cs中 这会更改默认页面,但会弄乱类别 我应该怎么做才
2回复

在C#MVC中设置默认路由

我正在 C# MVC 中创建一个项目并使用操作。 由于要求,现在我使用 Route 来隐藏控制器名称并仅显示页面名称。 路由配置 控制器 1(访问:http://localhost:17920/dashboard)和(http://localhost:17920/alert) 控制器 2(访问:ht
2回复

如何在MVC5中设置默认路由

我在理解MVC5中的默认路由设置时遇到了麻烦。 我在RouteConfig.cs文件中有此代码 当我访问www.mydomain.com/content/index它工作正常。 但是,如果我访问www.mydomain/content则会收到错误403.14 Forbidden。 我知
1回复

默认路由未重定向到MVC中的预期页面

我有一个HomeController ,其中有2个ActionResults是Index和Projects 。 现在,我的RouteConfig.cs添加了以下路由: 因此,根据上述配置,我期望默认情况下,用户将重定向到/Home/Projects 。 但是,它再次重定向到Index操作
1回复

无法为MVC项目设置默认路由

我无法为我的MVC项目设置默认路由。 当我运行项目时,它会转到地址http:// localhost:7555 /并给出“ HTTP错误404”,但是如果我输入url http:// localhost:7555 / Default ,它将转到“默认”页面。 但是我希望用户即使不输入http
2回复

在MVC中注册默认路由

我有一个ASP.NET 4.5应用程序,其中包括WebForms,MVC和Web API。 注册默认路由可以如下正常工作: 然后,我将ASPX页面设置为项目开始页面以进行测试,但无法弄清楚如何还原该更改。 路线仍然存在,但不起作用。 任何指针将不胜感激。
1回复

在MVC中使用属性路由发布路由默认路由

我试图找出为什么这两个场景的路由不起作用。 我想将此路径在Routes.config文件中转换为route属性。 它必须是默认值,因为当您仅加载网站而未输入任何URL时,它需要执行/ Home / Index操作。 我将其添加到actionResult Index()的Home控制器中,