所以我希望有一个状态页面,它将显示设备的不同布局,具体取决于谁使用它,这将是web.config中定义的变量。我应该为每个视图创建一个单独的控制器吗?一些背景功能应该类似,但将来可能会有所不同。或者我应该使用相同的cshtml文件并隐藏html标记,具体取决于谁使用它?
我在想做类似的事情:
@if(System.Configuration.ConfigurationManager.AppSettings["IsSuperUser"] == "true")
{
<a href="@Url.Action("SuperUserIndex", "Status")">Status</a>
}
else {
<a href="@Url.Action("UserIndex", "Status")">Status</a>
}
或者这是个坏主意?
答案 0 :(得分:2)
有几种选择,一切都取决于您的需求和偏好。
您的代码可以使用,但是您还必须仔细检查控制器中的权限!例如,您的网址为“/ SuperUser / Status”和“/ User / Status”。现在,什么阻止非超级用户在地址栏中键入“/ SuperUser / Status”?
一个重要的规则,绝不信任最终用户!假设他们不会按照您的意图去做。
总而言之,我的偏好是在模型中包含一个变量来识别用户级别(超级与非超级),然后使用它来确定视图中的布局。请记住,您还可以根据变量/表达式更改视图的布局。
@Layout = Model.IsSuperUser ? "_SuperLayout.cshtml" : "_RegularLayout.cshtml";
答案 1 :(得分:0)
听起来像一个观点问题。我会通过控制器中的依赖项传递配置数据并渲染部分:
NSExceptionDomains
然后控制器可以执行以下操作:
@if (Model.IsSuperUser)
{
@Html.Partial("_SuperUser")
}
else
{
@Html.Partial("_User")
}