0

asp システムを MVC3 に更新するタスクを与えられました。私の主な問題は、現在のシステムには 2 種類のユーザーがいて、各ユーザーには独自のユーザー テーブルがあり、現在の asp サイトでは、各ユーザーはさまざまなセッション保持変数によって定義されていることです。

他のシステムは 2 つの異なるユーザー テーブルを使用しているため、それらをマージすることはできません。では、最善の方法は何でしょうか?

私は当初、システム内でそれらを分離しておくことを考えていました。aspの相手からミラーリングされた個別の変数を保持する各ユーザーのクラスタイプを持ちます。ログイン時に、ユーザー タイプを認証 Cookie のユーザーデータにプッシュし、IPrincipal で拡張メソッドを作成して、必要に応じてユーザー タイプを返すことができます。

これはハックのように感じられ、ユーザーが同じページを表示するため、コードの重複が多くなります。

ユーザーリポジトリの前に、システム内のユーザータイプを識別する共通のユーザーオブジェクトにロールをアタッチする何らかの形式のファサードを作成する方がよいでしょうか? 次に、この役割を確認し、必要に応じてセッション変数に格納されていたデータを引き出すことができました。

4

4 に答える 4

0

両方のユーザーに共通のメソッドを持つインターフェイスを定義し、両方のユーザー タイプにインターフェイスを実装させます。したがって、次のようなものがある場合:

interface IUser { bool CanViewPage1(); }
class UserType1 : IUser { }
class UserType2 : IUser { }

Session["user"] = new UserType1();

次に、次のことができます。

var user = (IUser)Session["user"];

一般的な操作の場合:

if (user.CanViewPage1())
{ 
   ...
}

ユーザーオブジェクトが必要な操作の場合:

bool CanViewPage2(IUser user)
{
   if(user is UserType1)
   {
       var ut1 = (UserType1)user;
       ...
   } else if (user is UserType2)
   {
       var ut2 = (UserType2)user;
       ...
   }
}

あなたが言ったように、最後の部分は拡張メソッドを介して行うこともできます。

于 2011-11-23T12:43:06.117 に答える
0

カスタムの単純な STS サーバーで WIF を使用し、ユーザーの種類に対してクレームを使用することをお勧めします。 http://msdn.microsoft.com/en-us/library/ee748475.aspx

そして、このようなことを確認するには、カスタム属性を使用するか、単純な Identity.HasClaim("someclaim name or type") を使用します。

また、これにより、認証/承認のアプローチが標準化され、後で時間を節約できます=)

于 2011-11-23T14:24:23.057 に答える
0

これを行う機会が与えられた場合、次の方法で行います。

  1. asp.net メンバーシップ プロバイダーを実装し、すべてのユーザーをインポートします。
  2. ユーザー タイプごとに 2 つの異なるロールを作成する
  3. プロファイル プロバイダーを使用して、ユーザー タイプ テーブルから追加のプロパティを格納します。

このように、ロールとプロファイルの組み合わせを使用して、承認と制限に関連するあらゆる状況を処理できます。

于 2011-11-23T12:37:04.747 に答える
0

このアプリケーションをゼロから構築する場合は、ユーザー タイプを役割ごとに区別します。これを念頭に置いて、ユーザー ビルダーと担当者の間に腐敗防止クラスを作成しました。これにより、ロール (id 0) が挿入/削除され、ユーザー タイプが区別されます。将来、クライアントはテーブルをマージしたいと考えているため、現時点ではこれが最も賢明な方法のように思えました。

于 2011-11-25T12:31:41.373 に答える