Как запросить эффективные разрешения на объект Active Directory?

Я пытаюсь программно определить, имеет ли текущий пользователь определенные разрешения на данный объект Active Directory (конкретно в этом случае я пытаюсь определить, имеет ли пользователь разрешение "Send As" для другого пользователя Exchange или объекта списка рассылки).

Я уже понял, как получить доступ к атрибуту ntSecurityDescriptor с помощью ADSI: я могу перечислить ACEs в свойстве IADsSecurityDescriptor DiscretionaryACL. Но:

  • Как определить по этим данным, разрешено или запрещено разрешение "Отправить как" для доверенного лица?
  • Как определить это, если разрешение было предоставлено косвенно через членство в группе? Неужели мне придется самому разбирать эффективные разрешения, рекурсивно проверяя все группы, в которых состоит пользователь? Конечно, для этого должен существовать API...

FWIW, я пишу в Delphi (т.е. в родном Win32-коде), используя библиотеку типов ActiveDs.dll, поэтому решения, специфичные для .NET, не очень-то мне помогут, если только их исходный код не подскажет мне, как сделать то же самое в родном коде. То же самое относится и к PowerShell.


Прежде чем кто-то начнет: Я уже знаю о свойствах PR_EMS_AB_PUBLIC_DELEGATES и PR_EMS_AB_PUBLIC_DELEGATES_BL_O Extended MAPI. Однако это не то, что мне нужно. Эти свойства относятся к "Отправить от имени"-праву (также известному как делегаты), а не к разрешению "Отправить как", которое является совершенно другой вещью.

9
задан Oliver Giesen 30 November 2011 в 23:20
поделиться