我真的很感激我对我要实现的目标的一些反馈:
问题:
我的解决方案:
希望有帮助&感谢您花时间/精力回答这个问题!
阳光
答案 0 :(得分:1)
一个可能的解决方案是将控制点转换为控制器操作中的视图属性(可能这些是相同的事情,但是,您的问题并不清楚)。我们的想法是您的控制点将转换为有意义的视图方向,例如“AllowEdit”,“AllowSave”,“AllowDetailedView”等。这些将成为ViewData中的条目。
使用基本控制器类扩展Controller并为其提供ControlPoint集合。让您的过滤器在控制器中填充此集合。让基本控制器OnActionExecuted方法使用此集合,并且在ViewResult的情况下,使用视图指令集合的适当值填充ViewData。单个控制器操作还可以使用ControlPoint集合来确定是否需要根据视图是否呈现额外数据来为各个视图提供数据。
在您看来,不依赖于控制点本身,而是依赖于基本控制器确定的视图方向。这样您就可以将视图与控制点逻辑分离。视图仅以对视图有意义的方式对视图数据进行操作,而不是对在应用程序上下文中有意义的基于权限的数据进行操作。视图不关心特定指令的设置方式或原因,只需要根据指令的值进行适当的渲染。
答案 1 :(得分:0)
对于操作,您可以使用
[Authorized(Roles="CustomerService,CustomerServiceAdmin")]
public ActionResult Edit(...)
{
}
对于观看,请使用
<% if (Roles.IsUserInRole(Context.User.Name, "CustomerService")) %>