Проверьте, может ли пользователь прочитать файл на UNC-ресурсе - PullRequest
0 голосов
/ 26 мая 2010

Пользователь нашего клиента Windows имеет функцию отправки ссылок на файлы в наших общих сетевых ресурсах (UNC-пути) другим пользователям нашей компании.

Часто эти пользователи не знают, имеют ли получатели доступ к этой акции.

Стратегия проб и ошибок невозможна, поскольку пользователи, отправляющие ссылку, уже подключены к этому ресурсу со своими правами.

Так что, похоже, единственно возможным является использование API-вызовов для проверки, есть ли у получателей доступ, кто-нибудь знает, как это сделать?

Мне нужен только мета-код, я должен перевести его в скрипт лотоса (я не думаю, что кто-нибудь решил эту проблему в скрипте лотоса)

Ответы [ 2 ]

0 голосов
/ 27 февраля 2011

Поскольку вы используете LotusScript, пробовали ли вы использовать функцию Win API

Declare Function NetShareGetInfo Lib "Netapi32.dll" (strServerName As Any, strNetName As Any, ByVal nLevel As Long, pBuffer As Long) As Long

Для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/aa370654.aspx

0 голосов
/ 26 мая 2010

Теоретически, вам просто нужно вызвать какую-то "функцию" Windows, которая может ответить на вопрос, какие права доступа у этого пользователя к этому файлу. Единственный API, который я могу найти, который предоставляет эту информацию (и используется Windows ACL Editor и его функцией эффективных разрешений , - это GetEffectiveRightsFromAcl функция.

Однако его использование требует некоторого сложного низкоуровневого программирования на языке C. Это также ненадежно, как указано в статье Microsoft KB # 262278 :

Из-за этих ограничений не следует использовать API GetEffectiveRightsFromAcl, за исключением ситуаций, когда вы можете быть уверены, что контекст таков, что любые переопределенные права или привилегии пользователя не уместны, а целевой объект не защищен путем предоставления или отказа доступ к любым псевдогруппам. Как правило, точная информация о доступе для данного пользователя и защищаемого объекта может быть получена только через функцию AccessCheck, которая требует токен доступа для входа пользователя.

Предполагая, что в вашей среде это не проблема, вы можете воспользоваться проектом, размещенным на codeproject.com, который обернул низкоуровневый код в высокоуровневый COM-объект. Проект называется UserAccessCheck , и вы можете получить к нему доступ как к любому другому COM-объекту из LotusScript:

Dim hasWriteAccess as Variant
Dim obNet as Variant

obNet = CreateObject("Pardesi.TrusteeUtil")

hasWriteAccess = obNet.CheckPermissionsOnFile("foo", "bar", "C:\\DataFiles", 0x0002)
Msgbox(hasWriteAccess)

Я сам не пробовал этого, но с этого я и начал.

...