ASP.Net MVC&成员

时间:2009-05-17 15:37:25

标签: asp.net-mvc asp.net-membership profiles

我真的很感激我对我要实现的目标的一些反馈:

问题:

  1. 我想将我的应用程序的用户授权给控制器上的单个操作。例如:如果用户具有所需的授权,则可以在我的控制器类上执行“保存”操作。
  2. 在我正在进行的项目中,创建角色&他们的授权由客户部署团队完成。不在我的掌控之中。所以,我编程到一个“控制点”,可以分配给角色/用户,而我的应用程序只需要检查该控制点。
  3. 如何在ASP.Net MVC中获得控制点概念?更具体地说,如何根据控制器上的用户权限启用/禁用View上的按钮?
  4. 我的解决方案:

    1. 参考:http://weblogs.asp.net/fredriknormen/archive/2008/03/12/asp-net-mvc-framework-2-interception-and-creating-a-role-action-filter.aspx - 作为起点
    2. 不是像上面链接中所解释的那样创建一个角色过滤器,而是使用ControlPointFilter类来获取模型和模型。进行授权检查。
    3. 我遇到的麻烦是View类&我目前正在传递用户可以在ViewData []集合中访问的控制点集合。
    4. 在View类中,我正在检查相关的控制点是否存在于ViewData集合中(我不喜欢 - 希望在View类中将代码保持在最低水平)
    5. 另一个问题是 - 实际的控制点名称是在控制器类的属性中设置的,我在哪里/如何将这些属性传递给视图&但保持视野清洁?
    6. 希望有帮助&感谢您花时间/精力回答这个问题!

      阳光

2 个答案:

答案 0 :(得分:1)

一个可能的解决方案是将控制点转换为控制器操作中的视图属性(可能这些是相同的事情,但是,您的问题并不清楚)。我们的想法是您的控制点将转换为有意义的视图方向,例如“AllowEdit”,“AllowSave”,“AllowDetailedView”等。这些将成为ViewData中的条目。

使用基本控制器类扩展Controller并为其提供ControlPoint集合。让您的过滤器在控制器中填充此集合。让基本控制器OnActionExecuted方法使用此集合,并且在ViewResult的情况下,使用视图指令集合的适当值填充ViewData。单个控制器操作还可以使用ControlPoint集合来确定是否需要根据视图是否呈现额外数据来为各个视图提供数据。

在您看来,不依赖于控制点本身,而是依赖于基本控制器确定的视图方向。这样您就可以将视图与控制点逻辑分离。视图仅以对视图有意义的方式对视图数据进行操作,而不是对在应用程序上下文中有意义的基于权限的数据进行操作。视图不关心特定指令的设置方式或原因,只需要根据指令的值进行适当的渲染。

答案 1 :(得分:0)

嗯,难道你不能简单地创建一个模板系统,为用户分配角色吗?即创建一个用户模板“高级用户”,其角色为“CustomerService”和“ConfigurationEditor”,然后使用角色系统作为常用(即Roles.IsUserInRole(用户名,角色名称))?

对于操作,您可以使用

[Authorized(Roles="CustomerService,CustomerServiceAdmin")]
public ActionResult Edit(...)
{
}

对于观看,请使用

<% if (Roles.IsUserInRole(Context.User.Name, "CustomerService")) %>