我的MVC应用程序有一些角色。前任管理员。我使用CustomRoleProvider然后在视图中执行
@if (Roles.IsUserInRole("admin"))
{
<div class="editor-label">@Html.RadioButton("selection", "View Project Details", false)View Project Details</div>
}
最近我被告知要根据业务逻辑ex另外限制访问。如果用户在项目上创建了'xyz',则允许'xyz'访问该链接。 我知道一种方法是检查控制器并根据角色和BusinessLogic返回不同的视图。多数民众赞成无法管理! 有没有其他方法来实现这一目标?
答案 0 :(得分:0)
您只需在模型或ViewBag中存储权限,并使用上述if语句。您还可以创建IsInBuissnesRole
之类的方法并在其中实现逻辑。
答案 1 :(得分:0)
我已经回答了类似问题here。
基本上,您应该使用viewmodel,其属性表示是否应该为用户启用/显示视图的某些功能。然后它是控制器(可能基于一些业务逻辑服务)应该设置这些值。
示例:
// Model
public class Procuct
{
public int Id {get; set;}
public string Name {get;set;}
}
// Viewmodel
public class ProcuctViewModel
{
public int Id {get; set;}
public string Name {get;set;}
public bool CanEdit {get;set;}
public bool CanDelete {get; set;}
}
// somewhere in controller
var product = new ProductViewModel(_repo.GetProductById(1));
if (Roles.IsUserInRole("admin"))
{
product.CanEdit = true;
}
// ...
return View(product);
然后您的视图变得更简单,并且所有安全性内容都被移动到控制器并且是unittestable