在过去的几天里,我一直在思考这个问题,并且想知道其他人对此有何看法。我想实现一些基于用户所属角色的内容。我们的应用程序使用 HTTP 标头来接收角色信息。在 MVC 中,我应该让控制器处理角色检测,然后将布尔值传递给视图模型。
视图模型:
public class ProductViewModel
{
public Product MyProduct { get; set; }
public bool IsAdmin { get; set; }
public bool IsSuperAdmin { get; set; }
}
控制器:
public class ProductController : Controller
{
public ActionResult Info()
{
//get product information here
ProductViewModel pvm = new pvm();
pvm.Product = theProduct;
pvm.IsAdmin = checkAdminAccess(); //This would return a bool if they had access
pvm.IsSuperAdmin = checkSuperAdminAccess();//This would return a bool if they had access
return View(pvm);
}
}
看法:
@if(Model.IsAdmin == true || Model.IsSuperAdmin == true)
{
//Render Content for admin (Either directly or via Partial View)
}
@if(Model.IsSuperAdmin == true)
{
//Render Superadmin content (Either directly or via Partial View)
}
//Implement other Product Stuff Here
或者创建一个局部视图并处理视图中的逻辑会更好。这似乎涉及的工作较少。
@if (Request.Headers.AllKeys.Contains("role")){
ViewBag.Role = Request.Headers["role"].ToString();
}
...
@if(ViewBag.Role == "Admin" || ViewBag.Role == "SuperAdmin")
{
@Html.Partial("AdminPartial")//Or Render Code Directly?
if(ViewBag.Role == "SuperAdmin")
{
@Html.Partial("SuperAdminPartial")//Or Render Code Directly?
}
}
//Implement other Product Stuff Here
以一种或另一种方式做这件事有什么额外的好处,我应该直接渲染内容还是使用部分视图,还是没关系?还是我错过了其他应该完成的方式?