2017-10-28 143 views
1

我一直在玩弄身份和校长时,我注意到,该方法我加为什么PrincipalPermission拒绝安全操作仍允许访问?

[PrincipalPermission(SecurityAction.Deny, Role = "Admin")] 

GenericIdentity identity = new GenericIdentity("JC", "Type1"); 
GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "Admin", "User" }); 
Thread.CurrentPrincipal = principal; 

仍然是一个身份不抛出抛出:SecurityException,因为它会如果它有一个被调用需求安全行动。

事实上,即使我有拼写错误,像这样

[PrincipalPermission(SecurityAction.Deny, Role = "asad")] 

它的作用还是会允许我调用的方法没有一个合适

的问题是,为什么扔多少?

我的整个代码:

static void Main(string[] args) 
     { 
      GenericIdentity identity = new GenericIdentity("JC", "Type1"); 
      GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "Admin", "User" }); 
      Thread.CurrentPrincipal = principal; 
      UsePrincipal(); 
     } 

     static void UsePrincipal() 
     { 
      Console.WriteLine(Thread.CurrentPrincipal.Identity); 
      try 
      { 
       DevWork(); 
      } 
      catch 
      { 
       Console.WriteLine("You Bad!"); 
      } 
      Console.ReadKey(); 
     } 

     [PrincipalPermission(SecurityAction.Deny, Role = "Admin")] 
     static void DevWork() // Will be executed no matter what the role is 
     { 
      Console.WriteLine("You Good!"); 
      Console.ReadKey(); 
     } 
+0

您正在使用哪种版本的.NET? – Evk

+0

.net框架4.5.2 –

回答

1

您可以在SecurityActionDeny文档阅读是过时的:

在.NET Framework 4,运行时支持已经为 强制执行删除拒绝,RequestMinimum,RequestOptional和RequestRefuse权限请求。这些请求不应用于基于.NET Framework 4或更高版本的 的代码中。

由于您使用.NET 4.5.2 - 您的Deny请求被简单地忽略。

相关问题