为什么具有拒绝安全措施的PrincipalPermission仍然允许访问?

时间:2017-10-28 12:53:54

标签: c# authentication authorization identity principal

当我注意到我添加的方法

时,我一直在玩身份和校长
[PrincipalPermission(SecurityAction.Deny, Role = "Admin")] 

身份

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

仍然会被调用而不会抛出SecurityException,就像它有一个Demand安全行动一样。

事实上,即使我拼错了这样的角色

[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();
        }

1 个答案:

答案 0 :(得分:1)

您可以阅读SecurityAction的文档Deny已过时且

  

在.NET Framework 4中,已删除运行时支持   强制执行Deny,RequestMinimum,RequestOptional和RequestRefuse   许可请求。不应在代码中使用这些请求   基于.NET Framework 4或更高版本。

由于您使用的是.NET 4.5.2 - 您的Deny请求只是被忽略了。