У меня есть приложение vb.net 3.5, использующее класс PrincipalPermission, чтобы гарантировать, что пользователь является членом роли. Код работает для некоторых групп в домене Active Directory, но не работает для других. Сначала я подумал, что пространство было проблемой, но я проверил «Пользователи домена», и это сработало. Выполняя этот код, я являюсь участником группы приложений.
Imports System.Security
Imports System.Security.Principal
Imports System.Security.Permissions
Private Function DemandSecurity() As Boolean
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
Dim principalGroup As New PrincipalPermission(Nothing, "App Group")
Try
principalGroup.Demand()
Debug.Print("Demanding pricipal permissions for current user on 'App Group' role succeeded. ")
Catch secEx As SecurityException
Debug.Print("Security Exception - Demanding pricipal permissions for current user on 'App Group' role failed. ")
Application.DoEvents()
MessageBox.Show("Permission denied. Output: " & vbNewLine & secEx.ToString, "App - Security Exception", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
Return False
Exit Function
End Try
Return True
End Function
Вывод ошибки из secEx.ToString:
«System.Security.SecurityException: запрос на разрешение участника не удался. В System.Security.Permissions.PrincipalPermission.ThrowSecurityException () в System.Security.Permissions.PrincipalPermission.Demand () в App.My.MyApplication.DemandSecurity () в C: \ Documents and Settings \ me \ My Documents \ Visual Studio 2008 \ Projects \ App \ App \ ApplicationEvents.vb: строка 28
Действие, которое не удалось, было: Требовать. Тип первого разрешения, которое не удалось, был: System.Security.Permissions.PrincipalPermission.
Первое разрешение, которое не удалось, было: IPermission class = "System.Security.Permissions.PrincipalPermission, mscorlib, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089" version = "1"> Identity Authenticated = "true" Role = " Группа приложений "/>
Спрос был на: IPermission class = "System.Security.Permissions.PrincipalPermission, mscorlib, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089" version = "1"> Identity Authenticated = "true" Role = "Группа приложений" "/>
Произошедшая ошибка сборки или домена приложения: mscorlib, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 "
Дайте мне знать, если мне нужно добавить что-нибудь еще.