在asp.net mvc中,只需一个操作即可为不同的角色呈现不同的视图
假设一个web应用程序有三个部分或所谓的三个访问级别:在asp.net mvc中,只需一个操作即可为不同的角色呈现不同的视图,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,假设一个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);
}
这样做意味着所有用户都使用相同的控制器和身份验证,但视图会根据角色(或您想要的任何内容)进行更改
您可以阅读有关的详细信息。的可能副本