ホームページ >バックエンド開発 >C++ >ASP.NET MVC 2 でカスタム メンバーシップとロール プロバイダーを実装するにはどうすればよいですか?

ASP.NET MVC 2 でカスタム メンバーシップとロール プロバイダーを実装するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 06:41:43939ブラウズ

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

ASP.NET MVC 2 のカスタム メンバーシップ プロバイダーの実装

カスタム メンバーシップ プロバイダー

カスタム メンバーシップ プロバイダーを作成するには、 MembershipProvider 抽象クラスを継承し、ValidateUser メソッドをオーバーライドしてユーザーを検証します。目的のデータ ソースに対する認証情報。次の例を考えてみましょう:

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);
    }
}

参照を追加し、web.config で構成することでプロバイダーを ASP.NET MVC 2 に統合します:

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

カスタム ロール プロバイダー

ロールベースの認可の場合は、RoleProvider 抽象クラスを継承するクラスを作成し、 GetRolesForUser メソッドをオーバーライドします。

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;
}

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>

Authorization

Use the [Authorize( Roles="xxx,yyy")] 属性を使用して、特定のコントローラーとアクションを保護します

カスタム認証属性 (オプション)

権限のないユーザーを AccessDenied ページにリダイレクトするには、カスタム [MyAuthorization] 属性を作成します:

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

次のように属性を使用します:

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

以上がASP.NET MVC 2 でカスタム メンバーシップとロール プロバイダーを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。