3

私は、大きなWebサイトをより小さくより具体的なサイトに分割するプロジェクトに取り組んでいます。これらのサイトへのアクセスを必要な権限を持つユーザーのみに制限できるようにする必要があり、可能な限り既存のメンバーシップ/ロールデータモデルを利用したいと考えています。

したがって、理想的には、潜在的に複数のアプリケーション(aspnet_applicationsテーブルで定義されている)とアプリケーション固有の役割(aspnet_roles)を1人のユーザーに割り当てたいと思います。ただし、aspnet_usersおよびaspnet_membershipレコードは特定のapplicationIDを保持しているため、aspnetメンバーシップモデルではこれが許可されていないようです。

1人のユーザーを複数のアプリケーション/ロールに割り当てるにはどうすればよいでしょうか。

4

3 に答える 3

2

私は自分のSQLメンバーシッププロバイダーを使用しましたが、設計の点でSQLプロバイダーとそれほど違いはないと思います。

同じユーザーを異なる役割に関連付けるには、asp_net_usersinrolesというテーブルが必要です。そのテーブルに、同じuserIDと異なるroleIDを挿入して、ユーザーが複数のロールを持つことができるようにすることができます。

同様に、管理者ユーザーがさまざまな役割を割り当てることができるようにUIを作成する必要があります。私の場合、ListBoxを使用して、アプリケーション内の既存の役割を表示しました。これにより、複数選択が可能になります。

お役に立てれば。

于 2012-01-05T09:27:27.397 に答える
2

おそらく標準のSqlMembershipプロバイダーに加えて、データを1つのアプリケーションにリンクさせたくない場合は、カスタム管理/ロールプロバイダーの使用を検討できます。

データベース内の独自のテーブルを使用してメンバー/ロール情報を格納し、それらのテーブルを複数のアプリケーションで使用できるなど、データソースの使用の柔軟性が大幅に向上します。

さらに先に進むこともできます。たとえば、カスタムメンバーシップとロールプロバイダーを実装し、個別のモジュール(アセンブリ)を作成して、そのモジュールを複数のアプリケーションで再利用できます。

于 2012-01-05T09:35:27.417 に答える
0

メンバーシップがコードでチェックする ApplicationName を設定できます。

一連の他のアプリのすべてを制御する管理アプリケーションがあります。そのアプリケーションのユーザーが他のすべてのアプリにログインできるようにしたかったので、デフォルトのアプリケーションでユーザーのログインが失敗した場合は、「管理」アプリケーションを確認します。これは、ログイン部分のために私が持っているものです。「Membership.ApplicationName = "Administration";」という行に注意してください。

if (Membership.ValidateUser(model.UserName, model.Password))
{
    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
    {
        return Redirect(returnUrl);
    }
    else
    {
        return RedirectToAction("Index", "Home");
    }
}
else
{
    Membership.ApplicationName = "Administration";
    if (Membership.ValidateUser(model.UserName, model.Password))
    {
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && retu    rnUrl.StartsWith("/")
            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }
    else
    {
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
    }
}
于 2012-06-01T19:02:33.150 に答える