Скорее всего, ваш фреймворк ожидает от вас вывода bytes
, таким образом:
await wbsocket.send(json.dumps(...).encode(...))
Пара нитов:
b64encode
могут быть декодированы с помощью «ascii» так же как и «utf-8» из-за ограниченного набора символов base64 json.dumps
по умолчанию экранирует юникод, поэтому .encode("utf-8")
и .encode("ascii")
должны давать одинаковый результат str
или bytes
... Если Вы находитесь на.NET 3,5 стека, блок System.DirectoryServices.AccountManagement.dll имеет хороший API сверху AD. Следующий метод может быть реализован для решения проблемы:
static bool IsUserMemberOf(string userName, string groupName)
{
using (var ctx = new PrincipalContext(ContextType.Domain))
using (var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName))
using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName))
{
return userPrincipal.IsMemberOf(groupPrincipal);
}
}
// Usage:
bool result = IsUserMemberOf("CONTOSO\\john.doe", "CONTOSO\\Administrators");
Я не знаю, как этот метод работает, но это - чистое решение.
Вот другой способ использовать искателя каталога и memberOf. Это использует текущих пользователей objectSID, но Вы могли изменить это на некоторый другой идентификатор.
dSearch.Filter = String.Format("(&(memberOf={0})(objectSid={1}))", groupDN, WindowsIdentity.GetCurrent.User)
Return dSearch.FindOne() IsNot Nothing
если Ваша попытка использовать ввод данных пользователем, который мог бы содержать недопустимые символы, необходимо всегда выходить из них...
searchName = searchName.Replace("\", "\5c"). _
Replace("/", "\2f"). _
Replace("*", "\2a"). _
Replace("(", "\28"). _
Replace(")", "\29")
Вот то, что я использовал в прошлом в VBS Script, который работал очень хорошо:
Set wshNet = CreateObject("WScript.Network") 'Setup connection to the Network
Set fso = CreateObject("Scripting.FileSystemObject") 'Create File System Object for any file manipulations
Set ADSysInfo = CreateObject("ADSystemInfo") 'Setup connection to Active Directory
Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName) 'Setup current user to look for in Active Directory
strGroups = LCase(Join(CurrentUser.MemberOf)) 'Grabs all the groups the current user is a member of
Я затем использую InStr, чтобы видеть, является ли пользователь частью той группы:
If InStr(strGroups, "MyGroup") Then MyGroupSub
Вы смогли адаптировать вышеупомянутое в своем проекте.
Между прочим, я заметил, что в Вашем коде у Вас есть groupdoman как Ваш последний параметр для 'группы', Не уверенной, если Вы хотели, чтобы это было groupdomain или нет:
Тусклая группа Как DirectoryEntry = GetNetworkObject (GroupDomanName, NetworkObjectType. NetworkGroup, GroupName, groupdoman)
по сравнению с
Тусклая группа Как DirectoryEntry = GetNetworkObject (GroupDomanName, NetworkObjectType. NetworkGroup, GroupName, groupdomain)
Сообщите мне, помогает ли это! JFV
Я нашел ответ, который, кажется, работает в СЕТЕВЫХ 2.0, относительно быстр и преодолевает возможную проблему групп, содержащих больше чем 100 объектов (которые требуют поиска диапазона),
Вот код, с которым я волновал:
Dim DSearcher As New DirectorySearcher(group, "(&(objectClass=user)(cn=" + Login + "))", New String() {"member;Range=0-5000"}, SearchScope.OneLevel)
group = GetNetworkObject(GroupDomanName, NetworkObjectType.NetworkGroup, GroupName)
user = GetNetworkObject(UserDomainName, NetworkObjectType.NetworkUser, Login)
DSearcher.AttributeScopeQuery = "member"
Return (DSearcher.FindOne() IsNot Nothing)