当我注意到我添加的方法
时,我一直在玩身份和校长[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();
}
答案 0 :(得分:1)
您可以阅读SecurityAction的文档Deny
已过时且
在.NET Framework 4中,已删除运行时支持 强制执行Deny,RequestMinimum,RequestOptional和RequestRefuse 许可请求。不应在代码中使用这些请求 基于.NET Framework 4或更高版本。
由于您使用的是.NET 4.5.2 - 您的Deny
请求只是被忽略了。