我是谁?如何使用Microsoft Office权限/ UserPermission

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识别/授权的.

提前致谢!
沃尔克

vsc*_*ech 0

今天,我收到了 Microsoft 的附加答复(仍然涉及 SRQ091221600157),这实际上似乎解决了问题,至少在我的特定情况下是如此。这种方法仍然听起来像是一种解决方法,并且没有文档可以证实它确实有效,但它似乎足够合理并且可以承受一些临时测试。而且,与我想出的任何其他解决方法相比,它感觉不那么不完整。事情是这样的:

只有具有 msoPermissionFullControl 的用户才能看到其他用户的权限(未记录的假设)。因此,如果用户没有 msoPermissionFullControl,则 Permission 集合仅包含一项,并且此项反映当前用户的权限。如果权限集合包含多个项目,则意味着当前用户必须具有 msoPermissionFullControl。另外,当前用户必须在 Permission 集合中可见,但仍然无法找出 Permission 集合中的哪个身份代表当前用户。