我们的Windows客户端上的用户具有向我们公司的其他用户发送网络共享(UNC路径)上的文件的链接的功能。
这些用户通常不知道收件人是否可以访问此共享。
无法使用试错策略,因为发送链接的用户已经以他/她的权利连接到此共享。
因此,似乎唯一可能使用API调用来检查收件人是否有权访问,是否有人如何管理?
我只需要一个元代码,我必须将其翻译成莲花脚本(我不认为有人在莲花脚本中解决了这个问题)
答案 0 :(得分:0)
理论上,您只需要调用一些可以回答问题的Windows“功能”,该用户对此文件具有哪些访问权限。我能找到的唯一提供此信息的API(由Windows ACL Editor and its Effective Permissions feature使用)是GetEffectiveRightsFromAcl函数。
然而,使用它涉及C中的一些复杂的低级编程。它也是不可靠的,如Microsoft KB article #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)
我自己没试过,但这是我开始的地方。
答案 1 :(得分: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