如何在不使用逻辑的安全性的基础上隐藏Razor视图中的特定元素?

时间:2011-04-04 14:48:47

标签: asp.net-mvc asp.net-mvc-3

对于这个不那么古老的问题,我一直在寻找优雅的解决方案。如何在ASP.Net MVC视图中锁定表单元素,而不是在整个地方添加if ... then逻辑?
理想情况下,来自OnAuthorization或OnResultExecultion的BaseController将检查呈现表单元素并根据角色和范围隐藏/不呈现它们。
我考虑的另一种方法是编写某种自定义属性,以便与我们如何使用[Authorize]锁定ActionResults的方式保持一致。如果没有将隐藏对象列表传递给视图并将if全部放在一边,这是否可行?

其他背景信息:我们将有一个数据库,告诉我们在执行时(基于用户角色/范围)将隐藏哪些元素。我们正在使用MVC3和Razor Viewengine。我们正在使用BaseController,其中可以覆盖任何Controller方法。

对此的任何帮助都将深表感谢!

1 个答案:

答案 0 :(得分:2)

您可以使用多种不同的方法:

  1. 根据操作过滤器或控制器中的条件将用户发送到其他视图(仅显示视图)。
  2. 在现场的基础上,您可以在编辑器模板中构建逻辑,以根据角色/权限读取自定义数据注释。
  3. 您可以构建HTML帮助程序来处理逻辑并呈现相应的局部视图,css类或文本。
  4. 更多阅读: