gpt4 book ai didi

c# - SecurityManager.IsGranted() 行为

转载 作者:行者123 更新时间:2023-11-30 17:24:59 25 4
gpt4 key购买 nike

任何人都可以解释以下 c# 行为吗?我已经编写了一个小型控制台应用程序来了解 CAS,但我似乎无法理解为什么以下代码行会像它们那样工作:

string[] myRoles = new string[] { "role1", "role2", "role3" };
GenericIdentity myIdentity = new GenericIdentity("myUsername", "customAuthType");
GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myRoles);

System.Threading.Thread.CurrentPrincipal = myPrincipal;

Console.WriteLine(SecurityManager.IsGranted(new PrincipalPermission(null, "role1")));
Console.WriteLine(SecurityManager.IsGranted(new PrincipalPermission(null, "roleX")));

两次 SecurityManager.IsGranted() 调用的输出均为“true”。

如果我再添加以下行:

 new PrincipalPermission(null, "role1").Demand();
new PrincipalPermission(null, "roleX").Demand();

第一个需求调用通过,但第二个(如预期的那样)导致 SecurityException。

为什么 SecurityManager.IsGranted() 调用不为“roleX”权限返回 false?

最佳答案

在 .NET 4.0 中,SecurityManager.IsGranted 已过时。

原来是这样,如果您在 .NET 4.0 兼容性中编译,它会报错。

bool isGranted = SecurityManager.IsGranted(new SecurityPermission(SecurityPermissionFlag.Infrastructure))

修复它:

var permissionSet = new PermissionSet(PermissionState.None);
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode));
bool isGranted = permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet);

引用:
http://www.stringbuilder.net/post/2009/07/31/In-NET-40-SecurityManagerIsGranted-is-obsolete.aspx

关于c# - SecurityManager.IsGranted() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/311677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com