Wie entferne ich einen bestehenden Anspruch aus einem ClaimsPrinciple?

Ich mache ein Entwickler-tool für die Identität Roles für eine intranet-Website, um Entwicklern zu ermöglichen, schnell zu handeln, als irgendwelche Role als nötig. Rollen definiert sind Developer, Team Lead, Team Member, Engineering, Marketing, Guest und ein tool auf der web-Seite macht einen Anruf an eine Web-Api zum hinzufügen oder entfernen der Claim... nun, ich kann hinzufügen, aber kann nicht scheinen, um herauszufinden, wo die .RemoveClaim(claim) oder .TryRemoveClaim(claim) zugegriffen werden kann, damit es funktioniert. Muss ich zum erstellen eines benutzerdefinierten Ansprüche-manager, um diese Funktion, oder bin ich etwas fehlt?

Schaue ich System.Sicherheit.Ansprüche und fast alles andere scheint zu funktionieren sehr unkompliziert und es gibt keine Referenz zu benötigen umfangreiche Arbeit zu tun, was ich brauche.

Ich bin mit VS 2013/Web-Api2 mit .NET 4.5.1.

Die Webseite Seite verwendet ein einfaches ajax-Aufruf PUT und DELETE Funktionalität, bis ich diese zu arbeiten, wie ich will. Von der Steuerung, der meinen cs code:

    public void Put(int id, [FromBody]string role)
    {
        if (FindClaim(role) != null) return;

        var user = HttpContext.Current.User as ClaimsPrincipal;
        if (user == null) return;

        var claimId = new ClaimsIdentity();
        claimId.AddClaim(new Claim(ClaimTypes.Role, role));
        user.AddIdentity(claimId);
    }

    //DELETE api/devroleadjuster/5
    public void Delete(int id, [FromBody]string role)
    {
        var claim = FindClaim(role);
        if (claim == null) return;

        var user = HttpContext.Current.User as ClaimsPrincipal;
        if (user == null)  return;

        //Why can't I do this????
        user.RemoveClaim(claim);
    }

    private Claim FindClaim(string role)
    {
        try
        {
            var user = HttpContext.Current.User as ClaimsPrincipal;
            var claim = (from c in user.Claims
                         where c.Value == role
                         select c).Single();
            return claim;
        }
        catch (InvalidOperationException)
        {
            return null;
        }
    }

Den Put funktioniert Prima, das problem ist mit der Delete Teil von meinem code... ich will das user.RemoveClaim(claim); code oder so etwas in der Art... ich kann nicht sehen, warum kann ich nicht nach MSDN, und ich finde keine Beispiel-code für das entfernen einer Forderung.

InformationsquelleAutor der Frage Greg Mason | 2014-03-21

Schreibe einen Kommentar