【问题标题】:ASP.NET Provider with Different Types of Roles具有不同类型角色的 ASP.NET 提供程序
【发布时间】:2010-12-19 20:30:08
【问题描述】:

在授权用户时,我需要考虑不同类型的角色。 例如:约翰必须有职位经理并且是办公用品部门的一员才能订购新电脑。

Roles 的问题是 Roles.GetRolesForUser("John") 只能返回一个字符串数组。

我应该使用自定义 roleProvider 和自定义 roleManager 吗? 还是我应该开发一个自定义 ProfileManager 来添加 GetUsersWithProfileProperties() 之类的方法?

欢迎提出任何建议!

蒂博

编辑:上面的例子被简化了,我可以有多达 4 种类型的角色,它们是 4 个不同的集合。

编辑:我找到了very similar question

【问题讨论】:

  • 我看到这个方法存在 Roles.GetUsersInRole("")
  • 我无法理解这个问题 - 您给出的示例是关于测试用户是否具有给定角色,但您正在询问返回给定角色的用户列表的方法 - 这两个似乎没有连接?
  • 我编辑了我的帖子,因为它不是很清楚。问题的核心实际上是我有不同的角色。也许我可以通过多个角色提供者来实现这一点,但实现起来看起来很复杂。

标签: asp.net architecture membership provider roleprovider


【解决方案1】:

从你写的;我相信您现在需要的一切都是开箱即用的:

    // Return all Users in a  Role
    string[] users;
    users = Roles.GetUsersInRole("RoleName");
    // Return all Roles for a User
    string[] roles;
    roles = Roles.GetRolesForUser();
    // Search through Membership store locating users with a role
    MembershipUserCollection mu;
    mu = Membership.GetAllUsers();
    // Loop through all membership users looking for users in a role

    foreach(MembershipUser m in mu){
        if(Roles.IsUserInRole(m.UserName, "Role Name")){
            // Do something

            // We can even nest to x levels
            if (Roles.IsUserInRole(m.UserName, "Another Role")){

                // Do something else
            }
        }
    }

如果我误解了你的问题,请澄清。

【讨论】:

  • 然后我必须使阵列变平(在同一级别上具有“经理”和“办公用品”)。虽然这可行,但感觉有点像 hack。
  • 如果有第三种类型的角色,我必须添加另一个迭代器。
  • 角色是用户定义的,所以恐怕我永远看不到它们变成强类型。​​
  • 问题不在于它不是强类型,而是如何从一个通用的提供者接口查询不同的集合
  • ASP.Net 允许灵活地滚动您自己的自定义提供程序。据我所知,开箱即用的功能只是您扩展的基础。是的,在某些情况下,开箱即用的模型可以满足开发人员的需求,但在现实世界中,这种情况很少见。
【解决方案2】:

为什么不创建一个具有 Path-To-Level 类型约定的“CompositeRoleProvider”来访问每个从属角色提供程序。您仍然需要创建多个角色提供者,但您的复合或顶级提供者会为您完成所有工作。 我打算用 ProfileProvider 做类似的事情

【讨论】:

    【解决方案3】:

    我正在研究如何解决一个非常相似的问题,我得出的结论是最好的办法是实现自定义角色提供程序。

    我使用这个 (http://msdn.microsoft.com/en-us/library/317sza4k(v=vs.100).aspx) 作为基础,我将实现我的方法,例如 (IsManager、GetDepartment , ecc)。

    数据将存储在连接到 aspnet_users 表的自定义表中。

    希望它可以帮助将来的人:)

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 我知道 GetUsersInRole("") 存在,这不是问题。我将编辑我的帖子以重新措辞。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2011-04-18
      • 2010-12-27
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多