所以我有一个视图,例如电影列表(在表格中)。
所以现在我希望每个位置都有一个像删除或编辑这样的按钮,但只有在登录管理员帐户时才可见。
我应该制作2个控制器和2个视图(一个用于管理员,一个用于普通用户)?
有没有办法与一些隐藏的选项共享相同的视图,例如编辑和删除用户?
有没有比IsUserInRole("Administrator")
答案 0 :(得分:0)
我应该制作2个控制器和2个视图(一个用于管理员,一个用于普通用户)?
您可以使用1个控制器和1个视图,或1个控制器和2个视图,或2个控制器和2个视图。这取决于您从每个选项中重复使用的代码量,以及您计划的可扩展性类型。如果管理员获得了许多其他功能,并且/或者它要求页面布局不同,您可能希望使用2个视图和1个控制器。
有没有办法与一些隐藏的选项共享相同的视图,例如编辑和删除用户?
是。只需将条件控件括在if
语句中(例如if (IsUserInRole("Administrator") {@Html.ControlFor(m => m.Something)}
。根据页面的布局,可能更容易将整个DIV括起来而不是通过控件进行工作控制。
除了使用角色来限制呈现的控件之外,还必须限制可以调用的操作(即将代码添加到检查角色的操作处理程序)。否则,恶意用户可以欺骗与隐藏控件关联的HTTP流量,并做一些他本不应该做的事情。
有没有比IsUserInRole(“管理员”)
更好的方法
不,不是真的。您可以编写一些扩展方法或其他调用IsUserInRole
的函数,但在代码中的某个位置,您必须在某个时刻调用它。