C# AuthorizationContext.Principal正在自动从ClaimsPrincipal更改为GenericPrincipal
我不知道授权管理器中的上下文原则是如何变化的。我的代码是C# AuthorizationContext.Principal正在自动从ClaimsPrincipal更改为GenericPrincipal,c#,.net,.net-4.5,claims-based-identity,C#,.net,.net 4.5,Claims Based Identity,我不知道授权管理器中的上下文原则是如何变化的。我的代码是 public class AuthorisationManager : ClaimsAuthorizationManager { public override bool CheckAccess(AuthorizationContext context) { var resource = context.Resource.First().Value; var action = conte
public class AuthorisationManager : ClaimsAuthorizationManager
{
public override bool CheckAccess(AuthorizationContext context)
{
var resource = context.Resource.First().Value;
var action = context.Action.First().Value;
return context.Principal.HasClaim(resource, action);
}
public override void LoadCustomConfiguration(System.Xml.XmlNodeList nodelist)
{
base.LoadCustomConfiguration(nodelist);
}
}
我有GUI中的项目列表。第一次很好,但当我选择第二项时,上下文。原则被转换为一般原则
对此,任何想法都会有帮助。好的-WPF
是的,我模模糊糊地记得WPF中有一些关于Thread.CurrentPrincipal的“特性”
试一试
Thread.CurrentPrincipal=principal
AppDomain.CurrentDomain.SetThreadPrincipal(主体)
IIRC您可能必须在应用程序类(ctor?)中执行此操作。“返回context.Principal.HasClaim(资源,操作);”
嗯,通常情况下,在“决定”中没有1:1的索赔和授权。此外,在典型的场景中,声明只保存身份数据—稍后可以使用这些数据作为授权决策的基础。然后,授权管理器使用自己的数据管理来进行这些设计
现在,因为这是一个客户端应用程序(我不知道它是WPF),所以您可以做一些不同的事情。在服务器应用程序中,您的方法可以很好地扩展。我的应用程序是基于WPF的桌面应用程序,我只是将基于用户的声明加载到其声明实体中。是不是错了,请纠正我。为什么它会违背基于索赔的授权的目的呢。。