2012-02-09 304 views
0

帮助!这段代码有什么问题?我有一个Windows窗体应用程序,我需要使用基于角色的安全来保护DLL;只有“MyRole”中的某个人才能打电话给此程序集。DLL上的基于角色的安全

我已经尝试了两种不同的方法来设置当前主体,但我得到的只是“请求主体权限失败。”。

下面是一个小型控制台应用程序,演示了这个问题。提前致谢!

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

您是否尝试过使用在MyRole角色中执行的主体?您当前的代码将导致WindowsPrincipal被使用,并且该主体的角色将对应于用户的Windows /域组,这可能不包括“MyRole”。如果您不确定如何使用目标角色中的委托人进行测试,请尝试以下操作,而不是拨打SetPrincipalPolicy

AppDomain.CurrentDomain.SetThreadPrincipal(New GenericPrincipal(New GenericIdentity("somebody"), New String() { "MyRole" }))