AuthorizationContext.Principal自动从ClaimsPrincipal更改为GenericPrincipal

时间:2012-12-24 04:01:24

标签: c# .net .net-4.5 claims-based-identity

我不知道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。

任何想法都会对此有所帮助。

2 个答案:

答案 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),你可能会做一些不同的事情。在服务器应用程序中,您的方法可以很好地扩展。