Я занимаюсь разработкой интрасети, которая показывает конкретные ссылки только в том случае, если пользователь является членом определенных групп в Active Directory.Получить членов группы, вложенных в другую группу
Я использую этот код, чтобы эффективно проверить, является ли пользователь членом группы. Работает нормально, если группа содержит только пользователей, но она не работает, если в ней есть группа. Мне нужно, чтобы он работал, даже если конкретный пользователь во вложенной группе!
public bool isMember(string user, string group)
{
string value = "";
bool isMember = false;
try
{
DirectoryEntry entry = new DirectoryEntry(domain);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "sAMAccountname=" + user;
SearchResult mySearchResult;
mySearchResult = mySearcher.FindOne();
PropertyValueCollection prop = mySearchResult.GetDirectoryEntry().Properties["memberOf"];
for (int i = 0; i < prop.Count; i++)
{
value = prop[i].ToString();
string[] groups = value.Split(',');
foreach (string property in groups)
{
if (groups[1] == group)
{
isMember = true;
break;
}
}
}
entry.Close();
return isMember;
}
catch (COMException)
{
return false;
}
}
Как это сделать?
EDIT:
Я нашел код, который позволяет мне найти пользователя, даже если вложенной группе. Проблема в том, что она работает только в том случае, если мое подразделение содержит ONE группу, не работает, если есть несколько ... как вы думаете, я могу немного ее отредактировать, чтобы заставить ее работать правильно?
public bool isMember(string user, string group)
{
bool found = false;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "domain");
GroupPrincipal p = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, group);
UserPrincipal u = UserPrincipal.FindByIdentity(ctx, user);
found = p.GetMembers(true).Contains(u);
p.Dispose();
u.Dispose();
return found;
}
Получил этот код из ->here < -
Я хотел бы следовать вашему первому варианту, но я не знаю, как это сделать. Не могли бы вы мне немного помочь? Извините, я совершенно новичок в этом. – Sarah
Постараюсь выкопать образец. Между тем, вы можете рассмотреть альтернативу с помощью WindowsTokenRoleProvider, с помощью которой вы можете использовать HttpContext.Current.User.IsInRole для проверки членства в группе: http://msdn.microsoft.com/en-us/library/system.web.security .windowstokenroleprovider (v = vs.110) .aspx – Joe
Что вы думаете о коде в моем редактировании? @Joe – Sarah