2010-05-26 1 views
0

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

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

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

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

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

ответ

0

В теории, вам просто нужно сделать вызов некоторым Windows " функция ", которая может ответить на вопрос, какие права доступа этот пользователь имеет к этому файлу. Только API, я мог бы найти, что предоставляет эту информацию (и используется Windows ACL Editor and its Effective Permissions feature, является GetEffectiveRightsFromAcl функцией.

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

Из-за эти ограничения, то API GetEffectiveRightsFromAcl не должен использоваться в ситуации, когда вы можете быть уверены, что контекст таков, что любые главенствующие права пользователя или привилегия не уместны исключением, и целевой объект не является обеспечено путем предоставления или отказа в доступе к любым псевдогруппам. Как правило, точная информация о доступе для данного пользователя и защищаемого объекта может быть получена только d через функцию 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) 

Я не пробовал это сам, но это, где я хотел бы начать.

0

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

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

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

Смежные вопросы