1

我的 MVC 应用程序有几个角色。前管理员,一般。我使用 CustomRoleProvider 但在视图中我执行以下操作

@if (Roles.IsUserInRole("admin"))
    {
        <div class="editor-label">@Html.RadioButton("selection", "View Project Details", false)View Project Details</div>
    } 

最近我被告知要另外限制基于业务逻辑的访问。如果用户在项目上创建的是“xyz”,则允许“xyz”访问链接。我知道一种方法是检查控制器并根据角色和业务逻辑返回不同的视图。那将是无法控制的!有没有其他方法可以实现这一目标?

4

2 回答 2

0

您可以将权限存储在您的模型或 ViewBag 中,并使用上述 if 语句。您还可以创建类似方法IsInBuissnesRole并在其中实现逻辑。

于 2013-05-22T04:17:45.850 回答
0

我在这里回答了类似的问题。

基本上,您应该使用带有属性的视图模型,这些属性表示视图的某些功能是否应该对用户启用/可见。然后是控制器(可能基于某些业务逻辑服务)应该设置这些值。

例子:

// 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);

然后你的视图变得更简单,所有的安全内容都被移动到控制器并且是可单元测试的

于 2013-05-22T04:18:00.493 回答