使用Active Directory确定页面上显示的内容

时间:2013-11-22 15:48:21

标签: c# asp.net .net

我对C#很新。如果登录的用户是管理委员会的成员,则我想显示一组字段;如果用户不是管理委员会的成员,我想显示另一组字段。

经理已指示我使用Active Directory执行此操作。

是否有人可以指出我可以查看的例子?

我有没有办法编写一个页面(仅供我自己查看),它将显示该组织在Active Directory中拥有的所有用户组?

2 个答案:

答案 0 :(得分:0)

使用IsInRole()方法。它位于System.Principle名称空间中 - 据我所知。

答案 1 :(得分:0)

以下是执行Active Directory查询的一种方法,该查询可以获取所有域用户,特定用户的组以及用户是否属于某个组:

public static List<string> DomainUsers
{
    get
    {
        List<string> users = new List<string>();

        using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "domain"))
        {
            // find user by display name
            UserPrincipal user = new UserPrincipal(ctx);
            PrincipalSearcher search = new PrincipalSearcher(user);

            search.FindAll().Cast<UserPrincipal>().ToList().ForEach(u => users.Add(u.SamAccountName));
        }
        return users;
    }
}

/// <summary>
/// Gets all associated group names for current user on the current domain
/// </summary>
/// <returns></returns>
public static List<string> GetGroupNames(string username)
{
    var pc = new PrincipalContext(ContextType.Domain, "domain");
    var src = UserPrincipal.FindByIdentity(pc, username).GetGroups(pc);
    var result = new List<string>();
    src.ToList().ForEach(sr => result.Add(sr.SamAccountName));
    return result;
}

public static bool UserBelongsToGroup(string group)
{
    PrincipalContext pc = new PrincipalContext((Environment.UserDomainName == Environment.MachineName ? ContextType.Machine : ContextType.Domain), Environment.UserDomainName);

    GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, group);
    UserPrincipal up = UserPrincipal.FindByIdentity(pc, Environment.UserName);
    return up.IsMemberOf(gp);
}

请注意,在添加引用时,您需要使用可在.NET 4.0框架程序集中找到的System.DirectoryServices.AccountManagement命名空间。您需要将.NET 4.0作为目标,以使用此命名空间。