質問

わかった、

自分が何か間違ったことをしていることはわかっていますが、より良い方法が見つかりません。ユーザーが独自のミニ Web サイトをセットアップできるようにする Web サイトを開発しています。

ニンみたいなやつ。また、基本ログインは 1 つだけで、各ミニ Web サイトへのアクセスは (現時点では) 役割を介して提供されています。

したがって、私が今これを行っている方法は次のとおりです。

新しいミニ Web サイトが作成されるたびに、アプリケーションに 2 つのロールを作成します。なんとか_users そして ああ、管理者

ミニ Web サイトを作成するユーザーには blah_admin というロールが与えられ、このミニ Web サイト (またはネットワーク) に参加したい他のすべてのユーザーには blah_user というロールが与えられます。

誰でもどの Web サイトからでもデータを閲覧できます。ただし、データを追加するには、そのミニ サイトのメンバーである必要があります (blah_user ロールが割り当てられている必要があります)。

私が直面している問題は、ロールベースのシステムを採用することで、多くの作業を手動で実行しなければならないことです。User.IsAunthenticated プロパティで動作する Asp.Net 2 コントロールは、IsAuthenticated プロパティとともに、ユーザーが適切なロールを持っているかどうかも確認する必要があるため、基本的には役に立ちません。

システムを構築するためのより良い方法があると思いますが、その方法はわかりません。何か案は?

この Web サイトは、IIS 6 上の ASP.Net 2 で開発されています。ありがとう!

役に立ちましたか?

解決

ASP.NET の標準的なロール関連のものは必要なものではないと思います。次のように認証モジュールを変更してみることができます。

  1. Cookieを使用してログインします。
  2. 訪問者がどのような役割を担っているかを判断します。おそらく、ユーザーとサイトに対応する特別なテーブルを使用することになるでしょう。
  3. 列挙されたユーザー ロールを持つカスタム プリンシパルを作成し、現在のリクエストに ID とプリンシパルを割り当てます。

また、サイトごとに特別な役割を作るのも良いとは思いません。サイトが 100 個ある場合、ロールも 200 個あることになります。残念ながらかなり手に負えません。

私たちが同様のタスクを解決していたとき、標準のコントロールを使用していませんでした。すべてのサイトで単一のロール セットを使用していました。具体的なユーザーのメンバーシップは、現在のサイトおよびこのサイトとの関係に応じて決定されます。

追加:調査できるもう 1 つの可能性は、ASP.NET 認証システムに存在するアプリケーションです。各サブサイトを個別のアプリケーションに分離することは可能でしょうか?

アップデート: 私たちのアプリケーションで機能するメソッド。

  1. 複製されたロールを大量に作成しないでください。次の 2 つだけを使用します。ユーザーと管理者。サイトが公開されている場合、「ユーザー」ロールは単にグローバルになる可能性があります。あるサイトのユーザーは別のサイトのユーザーと変わりません。「ユーザー」と「全員」が異なる役割である場合、当然「ユーザー」もサイトにバインドされる必要があります。

  2. 標準の ASP.NET メンバーシップ ユーザーを使用しますが、標準のロール メカニズムは使用しません。

  3. サイトとユーザーの関係を保存する仕組みを作ります。サイト ID、ユーザー、ロールを保持する単純なテーブルにすることもできます。

  4. オーバーライドする必要があるのは IsInRole メソッドです。(方法s 正確には、後で説明します)。このメソッドは IPrinciple インターフェイスにあるため、独自のプリンシパル オブジェクトを作成する必要があります。とてもシンプルです。

    1. このタイプのメソッド IsInRole は、現在のサイト (HttpRequest から) を調べて、サイト ユーザー テーブルを調べ、ロールを取得する必要があります。
  5. 次に、プリンシパルをリクエストに関連付ける必要があります。PostAuthenticateRequest イベントで実行します。

  6. ロールプロバイダーもあります。正直、いつ使われるのか分かりませんが、IsInRoleメソッドもあります。同じ方法でオーバーライドできます。ただし、このプロバイダーの他の方法はより困難です。たとえば、AddUsersToRoles。ユーザー名とロールの配列を受け入れますが、どのコンテキスト (サイト) に追加する必要がありますか?現在まで?このメソッドがいつ呼び出されるのかわからないため、わかりません。したがって、いくつかの実験が必要です。RopePrincipal 自体が、RoleProvider を使用してロールのリストを取得していることがわかります (Reflector が役に立ちます)。そのため、標準プリンシパルを使用して、RoleProvider のみを実装しているのかもしれません。私たちのアプリケーションではこれは当てはまらないため、ここにどのような問題が隠れているのかはわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top