Документы 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
Пример вывода:
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
«Разрешение» - это растровое изображение, определение которого я нашел в общедоступных заголовочных файлах COM для Microsoft:
enum MsoPermission
{
msoPermissionView = 1,
msoPermissionRead = 1,
msoPermissionEdit = 2,
msoPermissionSave = 4,
msoPermissionExtract = 8,
msoPermissionChange = 15,
msoPermissionPrint = 16,
msoPermissionObjModel = 32,
msoPermissionFullControl = 64,
msoPermissionAllCommon = 127
};
Тем не менее, это не говорит мне, какие именно разрешения имеет мой код. Если бы я только знал, кто я (с точки зрения UserPermission.UserId), я мог бы искать свои разрешения в объекте Permission. Но я не могу найти эту информацию. Чего мне не хватает?
Известны способы получения имени пользователя Windows (логин текущего пользователя на этом компьютере с Windows). К сожалению, это не идентификатор пользователя, который проверяется, когда PowerPoint решает, какие разрешения у меня есть для документа. Подчеркнем: PowerPoint предоставляет пользовательский интерфейс, который позволяет мне изменять «кто я» во время выполнения. Очевидно, что это не меняет имя для входа в систему (то есть имя, возвращаемое ADVAPI). Имена пользователей, на которые ссылается PowerPoint, идентифицируются / авторизируются через паспорт Microsoft.
Заранее спасибо!
Volker