我不知道为什么 AuthorizationManager 中的上下文原则会发生变化。我的代码就像
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 中的项目列表。第一次它工作正常,但是当我选择第二项时, context.Principle 更改为 GenericPrinciple。
任何想法都会对此有所帮助。
好的 - WPF。
是的,我隐约记得 WPF 中有一些围绕 Thread.CurrentPrincipal 的“功能”。
尝试
Thread.CurrentPrincipal = principal
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
IIRC,你可能必须在 App 类中执行此操作(ctor?)。
return context.Principal.HasClaim(resource, action);
嗯 - 通常,声明和授权“决定”之间不存在 1:1 的相关性。此外,在典型场景中,声明仅保存身份数据 - 稍后可以使用某些数据作为授权决策的基础。然后,授权管理器使用自己的数据管理来做出这些决策。
现在,由于这是一个客户端应用程序(我不知道它是 WPF),您可能会做一些不同的事情。在服务器应用程序中,您的方法可以很好地扩展。