12

我正在尝试将角色身份验证添加到 ASP.NET MVC 应用程序的控制器中的操作。代码看起来像这样:

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

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

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

4

4 回答 4

16

如果您不需要以编程方式执行此操作,但您正在尝试确定需要指定的正确 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:

于 2009-05-28T22:22:53.307 回答
8

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

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

然后你可以使用:

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

或者:

string[] arr = Roles.GetRolesForUser();

在此处输入图像描述

于 2016-03-16T10:19:22.957 回答
3

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

有关更多信息,请参见:角色提供者

于 2009-05-28T18:26:21.227 回答
1

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

于 2009-05-28T20:58:09.250 回答