c# проверить, является ли пользователь членом группы?
у меня есть код, который я использую, чтобы проверить, если пользователь является членом группы, не работает,
теперь я хочу добавить возможность, чтобы проверить, если пользователь является членом группы!
что мне нужно изменить, чтобы достичь этого, я сделал некоторую работу, но она терпит неудачу!
вот мой код:
//Authenticate a User Against the Directory
private bool Authenticate(string userName,string password, string domain)
{
if (userName == "" || password == "")
{
return false;
}
bool authentic = false;
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain,userName, password);
object nativeObject = entry.NativeObject;
authentic = true;
}
catch (DirectoryServicesCOMException) { }
return authentic;
}
Я хочу сделать так:
private bool Authenticate(string userName,string password, string domain, string group)
3 ответов
это недоступно в Windows XP или более ранней версии.
в любом случае, чтобы проверить членство в группе, вы можете использовать этот код:
bool IsInGroup(string user, string group)
{
using (var identity = new WindowsIdentity(user))
{
var principal = new WindowsPrincipal(identity);
return principal.IsInRole(group);
}
}
In ASP.Net вы будете использовать Page.User.IsInRole("RoleName")
или в Windows, вы можете использовать System.Threading.Thread.CurrentPrincipal.IsInRole("RoleName")
Я решаю его с помощью этого кода
public bool AuthenticateGroup(string userName, string password, string domain, string group)
{
if (userName == "" || password == "")
{
return false;
}
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, userName, password);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectClass=user)(|(cn=" + userName + ")(sAMAccountName=" + userName + ")))";
SearchResult result = mySearcher.FindOne();
foreach (string GroupPath in result.Properties["memberOf"])
{
if (GroupPath.Contains(group))
{
return true;
}
}
}
catch (DirectoryServicesCOMException)
{
}
return false;
}
он отлично работает для меня, и его можно использовать с машиной, не являющейся частью контроллера домена / Active Directory
спасибо всем за помощь