vsc*_*ech 7 com permissions vba ms-office
在我的情况下,Microsoft Office文档:PowerPoint演示文稿可以具有受限制的权限.如何以编程方式查找我的代码对给定文档具有哪些权限?
我在MSDN上可以找到关于这个主题的所有内容:http: //msdn.microsoft.com/en-us/library/aa432118.aspx
如果我运行以下代码,我会得到一个对给定文档具有权限的用户列表:
Sub test()
Dim perm As Office.Permission
Set perm = ActivePresentation.Permission
Debug.Print "Enabled=" & perm.Enabled
If perm.Enabled Then
Debug.Print "PermissionFromPolicy=" & perm.PermissionFromPolicy
Debug.Print "PolicyName='" & perm.PolicyName & "'"
Debug.Print "PolicyDescription='" & perm.PolicyDescription & "'"
Dim uperm As Office.UserPermission
For Each uperm In perm
Debug.Print uperm.UserId & ", " & uperm.Permission
Next uperm
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
样本输出:
Enabled=True
PermissionFromPolicy=False
PolicyName='Do Not Distribute'
PolicyDescription='Permission is currently restricted. Only specified users can access this content.'
john@doe.com, 64
user@system.de, 33
myname@example.com, 33
Run Code Online (Sandbox Code Playgroud)
"Permission"是我在Microsoft的公共COM头文件中找到的定义的位图:
enum MsoPermission
{
msoPermissionView = 1,
msoPermissionRead = 1,
msoPermissionEdit = 2,
msoPermissionSave = 4,
msoPermissionExtract = 8,
msoPermissionChange = 15,
msoPermissionPrint = 16,
msoPermissionObjModel = 32,
msoPermissionFullControl = 64,
msoPermissionAllCommon = 127
};
Run Code Online (Sandbox Code Playgroud)
不过,这并没有告诉我我的代码具有哪些特定权限.如果我只知道我是谁(就UserPermission.UserId而言),我可以在Permission对象中查找我的权限.但我找不到那些信息.我错过了什么?
有一些已知的方法可以获取Windows用户名(该Windows计算机上当前用户的登录名).不幸的是,当PowerPoint决定我对文档具有哪些权限时,这不是检查的用户ID.要强调:PowerPoint提供了一个UI,可以让我在运行时更改"我是谁".显然,这不会更改登录用户名(即ADVAPI返回的名称).PowerPoint指的用户名是通过Microsoft的Passport识别/授权的.
提前致谢!
沃尔克
今天,我收到了 Microsoft 的附加答复(仍然涉及 SRQ091221600157),这实际上似乎解决了问题,至少在我的特定情况下是如此。这种方法仍然听起来像是一种解决方法,并且没有文档可以证实它确实有效,但它似乎足够合理并且可以承受一些临时测试。而且,与我想出的任何其他解决方法相比,它感觉不那么不完整。事情是这样的:
只有具有 msoPermissionFullControl 的用户才能看到其他用户的权限(未记录的假设)。因此,如果用户没有 msoPermissionFullControl,则 Permission 集合仅包含一项,并且此项反映当前用户的权限。如果权限集合包含多个项目,则意味着当前用户必须具有 msoPermissionFullControl。另外,当前用户必须在 Permission 集合中可见,但仍然无法找出 Permission 集合中的哪个身份代表当前用户。
归档时间: |
|
查看次数: |
1787 次 |
最近记录: |