0

我不知道 AuthorisationManager 中的上下文原则是如何变化的。我的代码就像

  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。

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

4

2 回答 2

1

好的 - WPF。

是的,我隐约记得 WPF 中围绕 Thread.CurrentPrincipal 有一些“功能”。

尝试

Thread.CurrentPrincipal = 主体

AppDomain.CurrentDomain.SetThreadPrincipal(principal);

IIRC,您可能必须在 App 类(ctor?)中这样做。

于 2012-12-24T10:12:37.383 回答
1

“返回 context.Principal.HasClaim(resource, action);”

好吧-通常没有索赔和授权“决定”的1:1关联。同样在典型的场景中,声明只保存身份数据 - 稍后可以使用某些数据来作为授权决策的基础。然后授权管理器使用它自己的数据管理来做出这些决定。

现在,由于这是一个客户端应用程序(我不知道它是 WPF),您可能会做一些不同的事情。在服务器应用程序中,您的方法可以很好地扩展。

于 2012-12-27T11:59:19.077 回答