2012-02-09 203 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" }))