我不知道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被chnaged到GenericPrinciple。
任何想法都会对此有所帮助。
答案 0 :(得分:1)
好的 - WPF。
是的我依稀记得在WPF中有一些关于Thread.CurrentPrincipal的“功能”。
试
Thread.CurrentPrincipal = principal
AppDomain.CurrentDomain.SetThreadPrincipal(主要);
IIRC你可能必须在App课程中这样做(ctor?)。
答案 1 :(得分:1)
“return context.Principal.HasClaim(resource,action);”
嗯 - 通常没有1:1的索赔和授权“决定”。此外,在典型情况下,声明仅包含身份数据 - 稍后可以使用某些数据来进行授权决策。然后,授权管理器使用自己的数据管理来进行这些操作。
既然这是一个客户端应用程序(我不知道它是WPF),你可能会做一些不同的事情。在服务器应用程序中,您的方法可以很好地扩展。