在asp.net mvc中,只需一个操作即可为不同的角色呈现不同的视图

在asp.net mvc中,只需一个操作即可为不同的角色呈现不同的视图,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,假设一个web应用程序有三个部分或所谓的三个访问级别: 每个访问者一个(仅用于查看内容,无需验证) 一个给用户(授权给用户) 一名管理员(授权管理员) 现在,管理员可以访问系统中的每个内容和每个操作,用户可以执行一些操作。我不想为用户和管理员创建单独的区域,因为我不想在每个区域重复相同的代码。例如,管理员和用户都可以创建产品,查看产品列表,创建目录和。。。而且每个访问者也可以看到产品列表,博客帖子。。。 因此,仅仅为了分离任务而分离并复制代码不是一个好主意。我还没有创建任何区域,我想通过定义用户

假设一个web应用程序有三个部分或所谓的三个访问级别:

  • 每个访问者一个(仅用于查看内容,无需验证)
  • 一个给用户(授权给用户)
  • 一名管理员(授权管理员)
  • 现在,管理员可以访问系统中的每个内容和每个操作,用户可以执行一些操作。我不想为用户和管理员创建单独的区域,因为我不想在每个区域重复相同的代码。例如,管理员和用户都可以创建产品,查看产品列表,创建目录和。。。而且每个访问者也可以看到产品列表,博客帖子。。。
    因此,仅仅为了分离任务而分离并复制代码不是一个好主意。我还没有创建任何区域,我想通过定义用户在系统中的角色来控制身份验证和授权(ideas!?),但主要问题是,我想为用户和管理员提供单独的用户界面(视图)。因为我只想使用一个控制器的产品,目录。。。并为它们设置身份验证和授权,如何为管理员和用户的每个请求呈现不同的视图?我也不想通过放置一堆if/else来定义要渲染的视图(我宁愿在区域中复制代码!),从而弄脏我的代码,有什么解决方案吗?

    可能最简单的解决方案是编写自己的(假设您使用的是razor)

    然后,当您要检索用户的视图时,可以检查用户角色并分配所需的视图。这是一个基本而粗糙的例子:

    public override ViewEngineResult FindPartialView(
      ControllerContext controllerContext, 
      string partialViewName, 
      bool useCache)
    {
      if (controllerContext.User.IsInRole("Admin"))
      {
        var adminViewLocations = new string[] {"~/AdminViews/" }
        return new ViewEngineResult(adminViewLocations);
      }
      return base.FindPartialView(controllerContext, partialViewName, useCache);
    }
    
    这样做意味着所有用户都使用相同的控制器和身份验证,但视图会根据角色(或您想要的任何内容)进行更改


    您可以阅读更多信息。

    最简单的解决方案可能是编写自己的解决方案(假设您使用的是razor)

    然后,当您要检索用户的视图时,可以检查用户角色并分配所需的视图。这是一个基本而粗糙的例子:

    public override ViewEngineResult FindPartialView(
      ControllerContext controllerContext, 
      string partialViewName, 
      bool useCache)
    {
      if (controllerContext.User.IsInRole("Admin"))
      {
        var adminViewLocations = new string[] {"~/AdminViews/" }
        return new ViewEngineResult(adminViewLocations);
      }
      return base.FindPartialView(controllerContext, partialViewName, useCache);
    }
    
    这样做意味着所有用户都使用相同的控制器和身份验证,但视图会根据角色(或您想要的任何内容)进行更改

    您可以阅读有关的详细信息。

    的可能副本