Heim >Backend-Entwicklung >C++ >Wie implementiert man benutzerdefinierte Mitgliedschafts- und Rollenanbieter in ASP.NET MVC 2?

Wie implementiert man benutzerdefinierte Mitgliedschafts- und Rollenanbieter in ASP.NET MVC 2?

Susan Sarandon
Susan SarandonOriginal
2025-01-05 06:41:43940Durchsuche

How to Implement Custom Membership and Role Providers in ASP.NET MVC 2?

Implementieren eines benutzerdefinierten Mitgliedschaftsanbieters für ASP.NET MVC 2

Benutzerdefinierter Mitgliedschaftsanbieter

Um einen benutzerdefinierten Mitgliedschaftsanbieter zu erstellen, Erben Sie die abstrakte Klasse MembershipProvider und überschreiben Sie die ValidateUser-Methode, um Benutzeranmeldeinformationen anhand Ihrer beabsichtigten Datenquelle zu überprüfen. Betrachten Sie das folgende Beispiel:

public class MyMembershipProvider : MembershipProvider
{ 
    public override bool ValidateUser(string username, string password)
    {    
        // Validate user credentials against your database here.
        var oUserProvider = new MyUserProvider();  
        return oUserProvider.ValidateUser(username,password,CurrentTerritoryID);
    }
}

Integrieren Sie den Anbieter in ASP.NET MVC 2, indem Sie einen Verweis hinzufügen und ihn in web.config konfigurieren:

<membership defaultProvider="MyMembershipProvider">
    <providers>
        <clear />
        <add name="MyMembershipProvider"
            applicationName="MyApp"
            Description="My Membership Provider"
            passwordFormat="Clear"
            connectionStringName="MyMembershipConnection"
            type="MyApp.MyMembershipProvider" />
    </providers>
</membership>

Benutzerdefinierter Rollenanbieter

Für die rollenbasierte Autorisierung erstellen Sie eine Klasse, die die abstrakte Klasse RoleProvider erbt und diese überschreibt GetRolesForUser-Methode.

public override string[] GetRolesForUser(string username)
{
    // Fetch user roles from the database here.
    SpHelper db = new SpHelper();
    DataTable roleNames = null;
    try
    {
        roleNames = db.ExecuteDataset(ConnectionManager.ConStr,
                    "sp_GetUserRoles",
                    new MySqlParameter("_userName", username)).Tables[0];
    }
    catch (Exception ex)
    {
        throw ex;
    }
    string[] roles = new string[roleNames.Rows.Count];
    int counter = 0;
    foreach (DataRow row in roleNames.Rows)
    {
        roles[counter] = row["Role_Name"].ToString();
        counter++;
    }
    return roles;
}

Konfigurieren Sie den Rollenanbieter in web.config:

<system.web>
...

<roleManager enabled="true" defaultProvider="MyRoleProvider">
    <providers>
        <clear />
        <add name="MyRoleProvider"
            applicationName="MyApp"
            type="MyApp.MyRoleProvider"
            connectionStringName="MyMembershipConnection" />
    </providers>
</roleManager>

...
</system.web>

Autorisierung

Verwenden Sie die [Authorize(Roles= „xxx,yyy“)]-Attribut, um Controller und Aktionen für bestimmte Zwecke zu schützen Rollen.

Benutzerdefiniertes Autorisierungsattribut (optional)

Um nicht autorisierte Benutzer auf eine AccessDenied-Seite umzuleiten, erstellen Sie ein benutzerdefiniertes [MyAuthorization]-Attribut:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class MyAuthorizationAttribute : AuthorizeAttribute
{
    // ... Implementation
}

Verwenden Sie das Attribut wie folgt:

[MyAuthorization(Roles = "Portal Manager,Content Editor", ViewName = "AccessDenied")]
public class DropboxController : Controller
{ 
    .......
}

Das obige ist der detaillierte Inhalt vonWie implementiert man benutzerdefinierte Mitgliedschafts- und Rollenanbieter in ASP.NET MVC 2?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn