【问题标题】:Roles available with Windows AuthenticationWindows 身份验证可用的角色
【发布时间】:2009-05-28 18:07:04
【问题描述】:

我正在尝试将角色身份验证添加到 ASP.NET MVC 应用程序的控制器中的操作。代码如下所示:

[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
    bool inRole = User.IsInRole("Admin");

如果我删除 Authorize 属性并在该代码示例的最后一行放置断点,有没有办法可以检查对象并找出可用的角色?

例如我在“即时”窗口中调用 User.IsInRole("Admin),它会给我一个真/假值。如何访问可用角色的集合?

【问题讨论】:

  • 您能否澄清您的问题,即您是在寻找分配给当前用户的角色还是用户可能属于的所有可能角色?

标签: asp.net-mvc windows-authentication


【解决方案1】:

如果您不需要以编程方式执行此操作,但您正在尝试确定需要指定的正确 Windows 组/角色,则可以从命令行使用它:

C:\> net group /domain  (lists all Roles in the domain)
C:\> net user <username> /domain (lists info, including roles for a user)

否则您将需要查询 Active Directory 的 LDAP 部分,或使用 DirectoryServices 下的内容。

看看这些网站以通过 C# 访问 Active Directory:

【讨论】:

  • 好吧,howto 链接现在将我带到“中国日期”。
  • 以防其他人在这里徘徊。 “Howto: (Almost) Everything In Active Directory via C# - Codeproject”的链接是:codeproject.com/Articles/18102/…
【解决方案2】:

将此添加到您的 web.config system.web 下:

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"/>

那么你可以使用:

string[] arr = Roles.GetRolesForUser(User.Identity.Name);

或:

string[] arr = Roles.GetRolesForUser();

【讨论】:

  • 谢谢,这可以非常快速地为所有本地和域角色提供,例如 BUILTIN\\Administrators 组
【解决方案3】:

您可以使用 System.Web.Security.Roles.Provider 中 RoleProvider 类的各种方法。

查看更多信息:Role Provider

【讨论】:

    【解决方案4】:

    我猜您这里没有使用角色提供程序,而是使用 WindowsPrincipal 的底层功能,其中角色映射到用户组。无论如何,我认为除了枚举该机器/该域中可用的 Windows 组之外,别无他法。不确定这是否有帮助,但我只能说这些,但不知道您要对所述角色列表做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多