我对C#很新。如果登录的用户是管理委员会的成员,则我想显示一组字段;如果用户不是管理委员会的成员,我想显示另一组字段。
经理已指示我使用Active Directory执行此操作。
是否有人可以指出我可以查看的例子?
我有没有办法编写一个页面(仅供我自己查看),它将显示该组织在Active Directory中拥有的所有用户组?
答案 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作为目标,以使用此命名空间。