Sagen wir, ich habe eine ASP.Net MVC App und diese App (UI) verweist auf eine Business Logic Layer (BLL) und die BLL verweist auf meine Data Access Layer (DAL).. NET Mitgliedschaft in nTier App
Ich verwende einen benutzerdefinierten Mitgliedschafts- und Rollenanbieter für die Autorisierung.
Ich versuche zu bestimmen, welche Schichten auf meinen Mitgliedschaftsanbieter verweisen müssen.
In MVC Sie Berechtigungsprüfungen in der folgenden Art und Weise durchführen können:
[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
//do something
}
Und in meinem BLL kann ich mag überprüfen, um zu sehen, ob ein Benutzer in einer Rolle als auch ist:
public static bool IsRoleEditor(User user, Role userRole)
{
bool retValue = false;
if (user.Application.AppID == UserRole.Application.AppID)
{
if (Roles.IsUserInRole("ModifyRoles"))
{
retValue = true;
}
return retValue;
}
Ich müsste die Mitgliedschaft Klassen in beiden Schichten verweisen und instanziieren, wenn ich dies tue. Ist das der richtige Weg, um eine App so zu erstellen? Scheint wie eine Menge Redundanz.
Da ich eine BLL habe vermeide ich die Verwendung der "[Authorize (Roles =" SomeRoleName ")]" Attribute und rufen Sie stattdessen eine BLL-Funktion aus dem MVC-Code, um zu überprüfen, ob der Benutzer in einer Rolle ist? Wenn ich das tue, benötigt der MVC immer noch einen Verweis auf den Mitgliedschaftsanbieter für die Authentifizierung und so, um die Login- und andere ASP-Steuerelemente trotzdem zu nutzen, richtig?
Bin ich weg von der Basis und in die falsche Richtung?
Verwenden Sie das Autorize-Attribut in MVC. Sie müssen IsInRoles nicht manuell überprüfen. –
Das Problem ist, dass ich zusätzliche Business-Logik zusätzlich zu "IsInRole" oder "Authorize", die ich dachte, sollte immer in der BLL sein müssen. Ich könnte das Benutzerobjekt überall weitergeben, aber dann warum nicht einfach die Autorisierung weglassen und nur die BLL verwenden. – Jay