0

Ich habe ein ASP.NET MVC-Projekt und Kunde benötigt einen separaten Zugriff für verschiedene Rollen. Er möchte viele Rollen haben, aber einige von ihnen haben einen sehr ähnlichen Zugang (außer nur ein paar Dinge). Natürlich kann ich es folgendes machen mag:Rollen- oder Anspruchsbasierte Autorisierung? Oder Hybrid?

if (User.IsInRole("Superadmin") || User.IsInRole("CompanyAdmin") || ...) 
{ 
    // bla-bla-bla 
} 
else if (....) 
{ 
} 

Allerdings scheint es mir, dass es nicht so flexibel ist, wie es sein sollte. Bei kleinen Abweichungen der Rechte muss das Skript das gesamte Projekt überprüfen und ändern.

Ich denke, um einen "hybriden" Ansatz zu machen, d. H. Eine Rolle für einen Benutzer wie jetzt, und auch Ansprüche festlegen. Und prüfen Sie nachher nur die Ansprüche, aber nicht die Liste der Rollen. Wenn es erforderlich ist, den Zugriff für eine Rolle zu ändern, fügen Sie einen Claim an einer Stelle nach der Anmeldung hinzu oder entfernen Sie ihn (nicht einmal notwendig, um ihn in der Datenbank zu speichern).

Was denkst du?

Antwort

2

Verwenden Sie Ansprüche für alles. Einige Ansprüche können einfach - Rollen sein. Sie können also einen Benutzer mit Claim: role> CompanyAdmin haben, aber derselbe Benutzer kann auch Anspruch haben: canAccessSuperadminDashboard> true (oder wie auch immer Sie weitere Rechte definieren möchten).

Wenn Sie die beiden kombinieren, erhalten Sie einen sehr granularen Ansatz, bei dem Ihre ersten Prüfungen für Rollenansprüche und dann für detailliertere Dinge bestimmte Ansprüche überprüfen können.

Einer der Vorteile dieses Ansatzes besteht darin, dass Ihre Rollenansprüche Principal-Benutzer zugeordnet werden, sodass Ihre Authorize (Rollen = "Admin") direkt mit Rollenansprüchen arbeiten.

+0

aber ich muss eine lange Liste erstellen, um alle erlaubten Rollen und canAccessSuperadminDashboard zu überprüfen. Ich möchte nur einen Anspruch prüfen ... –

+0

nur einen Anspruch prüfen? das wird nicht funktionieren, außer wenn Sie so viele Ansprüche haben wollen wie Permutationen aller möglichen Rechte. was wäre, irgendwie hm ... peinlich :) –

Verwandte Themen