代码之家  ›  专栏  ›  技术社区  ›  Sunny

ASP。Net MVC和成员资格

  •  1
  • Sunny  · 技术社区  · 17 年前

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

    1. http://weblogs.asp.net/fredriknormen/archive/2008/03/12/asp-net-mvc-framework-2-interception-and-creating-a-role-action-filter.aspx
    2. 在View类中,我正在检查ViewData集合中是否存在相关的控制点(我不喜欢这样——希望在View类中将代码保持在最低限度)

    2 回复  |  直到 14 年前
        1
  •  1
  •   tvanfosson    17 年前

    一种可能的解决方案是在控制器操作中将控制点转换为视图属性(也许这些是相同的东西,不过,从你的问题中还不清楚)。这个想法是,你的控制点将转化为有意义的视图方向,如“AllowEdit”、“AllowSave”、“AllowDetailedView”等。这些将成为ViewData中的条目。

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

    在您看来,不依赖于控制点本身,而是依赖于基础控制器确定的视图方向。这样,您就将视图与控制点逻辑解耦了。视图仅以对视图有意义的方式操作视图数据,而不操作在应用程序上下文中有意义的基于权限的数据。视图不关心如何或为什么设置特定的指令,它只需要根据指令的值进行适当的呈现。

        2
  •  0
  •   Soraz Krishnendu    17 年前

    嗯,你能不能简单地创建一个模板系统,为用户分配角色?即,创建一个具有“CustomerService”和“ConfigurationEditor”角色的用户模板“高级用户”,然后像往常一样使用角色系统(即roles.IsUserInRole(用户名、角色名))?

    对于操作,您可以使用

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

    对于视图,您可以使用

    <% if (Roles.IsUserInRole(Context.User.Name, "CustomerService")) %>
    
    推荐文章