我正在构建 ASP MVC 4 Web 应用程序,我需要在我的视图上创建细粒度的权限。这意味着我需要根据他们的角色、数据类型请求和其他授权规则向某些用户显示一些操作。
在控制器端,我将 Authorize 属性放在适当的位置并创建细粒度的代码,如下所示:
public ActionResult Index() {
List<Survey> surveys;
if (MyUser.IsSuperUser) {
surveys = surveyRep.AllSurveys.ToList();
}
else {
surveys = surveyRep.VisibleSurveys.ToList();
}
return View(surveys);
}
因为我正在构建多租户应用程序,所以任何不是超级用户的用户只能看到“可见”调查。超级用户总能看到一切。
现在的问题是如何在视图端创建相同的东西,而不需要复制逻辑(DRY)。
目前,当用户不是超级用户并且只有一个租户链接时,我使用此剃刀视图逻辑:
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Survey</legend>
@if (!MyUser.IsSingleTenant) {
<div class="editor-label">
Tenant
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.TenantID, ...
@Html.ValidationMessageFor(model => model.TenantID)
</div>
}
MyUser 返回当前登录的用户,IsSingleTenant 指示她是否仅链接到单个租户。
恐怕这会使我的观点因大量“如果-那么”逻辑而变得混乱。
其他人如何解决这个问题?
谢谢你,伊多。