假设一个Web应用程序有三个部分或所谓的三个访问级别:
现在,管理员可以访问系统中的每个内容和每个操作,用户可以执行一些操作。我不想为用户和管理员创建单独的区域,因为我不想在每个区域重复相同的代码。例如,管理员和用户都可以创建产品,查看产品列表,创建目录......还有每个访问者也可以看到产品列表,博客帖子,...... 因此,为了分离任务而分离和复制代码并不是一个好主意。我没有创建任何区域,我想通过在他/她进入系统时定义用户角色来控制身份验证和授权(想法!?)但主要问题是当我想要单独的用户界面(视图)时对于用户和管理员。因为我只想使用一个Controller用于产品,目录,...并为它们设置身份验证和授权,我如何为管理员和用户的每个请求呈现不同的视图?我也不想通过放置一堆if / else来定义要呈现的视图(我宁愿在区域中复制代码!),任何解决方案来使我的代码变脏?
答案 0 :(得分:4)
最简单的解决方案可能是编写自己的RazorViewEngine(假设您使用的是剃须刀)。
然后,当您要为用户检索视图时,可以检查用户角色并分配所需的视图。这是一个基本而粗略的例子:
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);
}
这样做意味着所有用户都使用相同的控制器和身份验证,但视图会根据角色(或任何您想要的内容)而发生变化。
您可以阅读有关A Custom View Engine with Dynamic View Location的更多信息。