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

ASP.NETMVC和会员资格

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

    我非常希望得到一些关于我努力实现目标的反馈:

    问题是:

    1. 我想授权我的应用程序的用户在控制器上执行单个操作。例如:如果用户具有所需的授权,则可以对我的控制器类执行“保存”操作。
    2. 在我正在进行的项目中,角色的创建;他们的授权由客户部署团队完成;不是我能控制的。因此,我编程到一个“控制点”,可以分配给角色/用户,而我的应用程序只需要检查该控制点。

    我的解决方案:

    1. 裁判。: http://weblogs.asp.net/fredriknormen/archive/2008/03/12/asp-net-mvc-framework-2-interception-and-creating-a-role-action-filter.aspx
    2. 我遇到的麻烦是视图类&我当前正在传递用户在ViewData[]集合中有权访问的控制点集合。
    3. 在View类中,我正在检查ViewData集合中是否存在相关的控制点(我不喜欢这一点-希望在View类中将代码保持在最小值)
    4. 另一个问题是-在控制器类的属性中设置实际控制点名称时,我在何处/如何将这些属性传递给视图&但要保持景观整洁?

    希望这有助于&感谢您花时间/精力回答此问题!

    2 回复  |  直到 12 年前
        1
  •  1
  •   tvanfosson    15 年前

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

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

        2
  •  0
  •   Soraz Krishnendu    15 年前

    嗯,你不能简单地创建一个模板系统,为用户分配角色吗?即,创建一个用户模板“超级用户”,其角色为“CustomerService”和“ConfigurationEditor”,然后像往常一样使用角色系统(即roles.IsUserInRole(username,rolename))?

    对于操作,则使用

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

    对于视图,可以使用

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