gpt4 book ai didi

c# - 什么是通用身份?

转载 作者:IT王子 更新时间:2023-10-29 04:23:31 26 4
gpt4 key购买 nike

任何人都可以简要解释一下 GenericIdentity 的用途以及在哪里使用它。

最佳答案

GenericIdentityGenericPrincipal 是将用户描述为“委托(delegate)人”的最简单方式。这可用于应用程序中的实现未知安全检查 - 即如果用户以“Fred”身份登录并具有“用户”和“管理员”权限:

    string[] roles = { "User", "Admin" };
Thread.CurrentPrincipal = new GenericPrincipal(
new GenericIdentity("Fred"), roles);

您可以在客户端登录到 winform 时执行此操作,或者在 WCF、ASP.NET 等中有特定的操作点。

然后以后的代码,无需知道如何处理这些权限,就可以检查该权限 - 通过 IsInRole ,或者声明式地:

[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
void SomeAdminFunction() { }

这里一些有用的实用程序代码是围绕主体/身份的空安全包装器:

public static string GetUsername() {
IPrincipal principal = Thread.CurrentPrincipal;
IIdentity identity = principal == null ? null : principal.Identity;
return identity == null ? null : identity.Name;
}
public static bool IsInRole(string role) {
IPrincipal principal = Thread.CurrentPrincipal;
return principal == null ? false : principal.IsInRole(role);
}

那么你的 DAL 中可能有一些审计代码:

row.UpdatedBy = MyUtilityClass.GetUsername();

GenericPrincipal 对于普通用户名和一组已知角色的简单情况很有用。例如,更复杂的主体实现可能会进行“按需”访问检查 - 即直到您要求它不知道的“Foo”角色 - 然后它会发现(通过与网络服务、数据库、事件-目录等)并缓存结果以供将来访问。当潜在角色列表很大,而通常在现实 中查询的角色数量很少时,这很有用。

您还可以使用主体来存储仅在特定上下文中需要的额外身份信息 - 例如,安全 token 。调用者可以使用 as 测试主体以查看它是否支持额外数据。

使用“principal”很有用,因为您的逻辑处理代码可以讨论身份,而不必知道这是 winforms、ASP.NET、WCF、windows 服务等 - 它是抽象的。此外,一些第 3 方代码也会与委托(delegate)人对话。

作为另一个例子 - 我写了一些 example code here这显示了如何使用主体通过设计器控制对 winform 控件的访问(通过 IExtenderProvider - 将额外条目放入 VS 的属性网格中)。

关于c# - 什么是通用身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818891/

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