帮助!这段代码出了什么问题?我有一个Windows窗体应用程序,我需要使用基于角色的安全保护DLL;只有“MyRole”中的某个人才能调用此程序集。
我尝试了两种不同的方法来设置当前主体,但我得到的是“请求主体权限失败。”
这是一个小型控制台应用程序,用于演示此问题。提前谢谢!
Imports System.Security
Module Module1
Sub Main()
Try
AppDomain.CurrentDomain.SetPrincipalPolicy(Principal.PrincipalPolicy.WindowsPrincipal)
'Dim oCurrPrincipal As New Principal.WindowsPrincipal(Principal.WindowsIdentity.GetCurrent())
'Threading.Thread.CurrentPrincipal = oCurrPrincipal
Dim oWriter As New Writer
oWriter.WriteLog("It seems so simple, why doesn't it work?")
Catch ex As Exception
Console.WriteLine(ex.ToString)
Finally
Console.ReadLine()
End Try
End Sub
End Module
Imports System.Security.Permissions
Imports System.Security
<PrincipalPermission(SecurityAction.Demand, Role:="MyRole")> _
Public Class Writer
Public Overloads Sub WriteLog(ByVal sMessage As String)
Console.WriteLine(sMessage)
End Sub
End Class
答案 0 :(得分:0)
您是否尝试过使用MyRole角色中的主体?您当前的代码将导致WindowsPrincipal被使用,并且该主体的角色将对应于用户的Windows /域组,其可能不包括“MyRole”。如果您不确定如何使用目标角色中的主体对此进行测试,请尝试以下操作而不是SetPrincipalPolicy
来电:
AppDomain.CurrentDomain.SetThreadPrincipal(New GenericPrincipal(New GenericIdentity("somebody"), New String() { "MyRole" }))