0

我们 Windows 客户端上的用户具有将指向我们网络共享 (UNC-路径) 上的文件的链接发送给我们公司的其他用户的功​​能。

这些用户通常不知道接收者是否有权访问此共享。

试错策略是不可能的,因为发送链接的用户已经使用他/她的权限连接到此共享。

所以它似乎是唯一可能使用 API-Calls 来检查接收者是否有访问权限的方法,有没有人可以管理这个?

我只需要一个元代码,我必须将它翻译成莲花脚本(我认为没有人在莲花脚本中解决了这个问题)

4

2 回答 2

0

理论上,您只需要调用一些 Windows“函数”即可回答这个问题,即该用户对该文件有什么访问权限。我能找到的唯一提供此信息的 API(并且由Windows ACL 编辑器及其有效权限功能使用)是GetEffectiveRightsFromAcl函数。

但是,使用它涉及一些复杂的 C 低级编程。它也不可靠,如Microsoft KB 文章 #262278 所述

由于这些限制,不应使用 GetEffectiveRightsFromAcl API,除非您可以确定上下文使得任何覆盖的用户权利或特权都不相关,并且目标对象没有通过授予或拒绝访问任何伪群。通常,只能通过 AccessCheck 函数检索给定用户和安全对象的准确访问信息,该函数需要用户登录的访问令牌。

假设这在您的环境中不是问题,您可能会受益于托管在 codeproject.com 上的项目,该项目已将低级代码包装在更高级别的 COM 对象中。该项目称为UserAccessCheck,您可以像从 LotusScript 中访问任何其他 COM 对象一样访问它:

Dim hasWriteAccess as Variant
Dim obNet as Variant

obNet = CreateObject("Pardesi.TrusteeUtil")

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

我自己没有尝试过,但这是我要开始的地方。

于 2010-05-26T19:23:56.703 回答
0

由于您使用的是 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

于 2011-02-27T20:45:55.517 回答