DLL上基于角色的安全性

时间:2012-02-09 05:34:27

标签: .net code-access-security

帮助!这段代码出了什么问题?我有一个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

1 个答案:

答案 0 :(得分:0)

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

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