MVC视图中的安全性

Dis*_*ile 11 c# asp.net-mvc razor

在我的MVC应用程序中,我有几个不同的角色:管理员,普通用户等等.

我知道我可以通过Authorize属性将安全性应用于我的控制器:

[Authorize(Roles="Admin")]
public ActionResult Create()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

但我还需要对视图应用一些安全性,以便不将View的某些部分显示给某些角色:

@if( User.IsInRole("Admin") )
{
    @Html.ActionLink("Create", "Create")
}
Run Code Online (Sandbox Code Playgroud)

以上述方式执行此操作是否更好,或者在ViewModel中处理此类安全性:

public ActionResult Index()
{
    var model = new IndexViewModel();

    model.CanCreate = User.IsInRole("Admin");

    return View(model);
}

View:
@( Model.CanCreate )
{
    @Html.ActionLink("Create", "Create")
}
Run Code Online (Sandbox Code Playgroud)

第二种方法与第一种方法相比是否有任何好处,还是只是偏好?

Ser*_*kin 6

第二种方式更受欢迎,因为您的业务逻辑将保持在模型级别.

在您的示例中,业务逻辑非常简单.但是,想象一下需求已经发生变化,现在不仅管理员可以创建内容,而且还可以创建超过1个月前注册的普通用户.有了业务逻辑,您必须更新所有视图.