Sonntag, Dezember 15, 2019

Wie Sie ‚übergeben Sie den parameter‘, um benutzerdefinierte AuthorizeAttribute

Möchte ich secure controller-Aktion, so dass nur Benutzer mit der Rolle „Admin“ gelangen kann.

Ich glaube nicht, verwenden Sie die Rolle/Membership provider-alles ist „custom“.

Ich habe diese so weit:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);            
        if (!isAuthorized)
            return false;

        string username = httpContext.User.Identity.Name;

        UserRepository repo = new UserRepository();

        return repo.IsUserInRole(username, "Admin");
    }
}

Beachten Sie, dass ich hardcoded „Admin“ hier.

Ich will, dass diese dynamisch sein.

Diese Arbeit nun:

[CustomAuthorize]
        public ActionResult RestrictedArea()...

Aber ich möchte so etwas wie dies:

[CustomAuthorize(Roles = "Admin")]
        public ActionResult RestrictedArea()
InformationsquelleAutor 1110 | 2013-02-23

1 Kommentar

  1. 20

    AuthorizeAttribute bereits Roles Eigenschaft, die für diesen Zweck verwendet werden:

    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var isAuthorized = base.AuthorizeCore(httpContext);            
            if (!isAuthorized)
            {
                return false;
            }
    
            string username = httpContext.User.Identity.Name;
    
            UserRepository repo = new UserRepository();
    
            return repo.IsUserInRole(username, this.Roles);
        }
    }
    • Ich bin immer this.Roles Wert als null
    • Did you pass Wert Roles variable [CustomAuthorize(Roles="admin")]?
    • ja ist Alles gleich
    • Leider ohne deinen code kann ich dir nicht helfen. Ich kann jedoch Ihnen Ratschläge geben. Zunächst versuchen Sie es mit Schritt-für-Schritt-debugging (einschließlich Haltepunkt auf Roles setter, die verlangen, dass provding benutzerdefinierte set Methode, nicht die automatische, die wir hier haben) und versuchen, reporduce es in eine neue (minimal -) Projekt.
    • AuthorizeAttribute hat bereits eine Eigenschaft „Rollen“. entfernen Sie das public string Rollen { get; set; } und lasse den rest wie er ist
    • Ich bearbeitet meine post, vielen Dank!

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...