ホワイトラベルサービスアクセスの役割
-
22-08-2019 - |
質問
わかった、
自分が何か間違ったことをしていることはわかっていますが、より良い方法が見つかりません。ユーザーが独自のミニ 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 の標準的なロール関連のものは必要なものではないと思います。次のように認証モジュールを変更してみることができます。
- Cookieを使用してログインします。
- 訪問者がどのような役割を担っているかを判断します。おそらく、ユーザーとサイトに対応する特別なテーブルを使用することになるでしょう。
- 列挙されたユーザー ロールを持つカスタム プリンシパルを作成し、現在のリクエストに ID とプリンシパルを割り当てます。
また、サイトごとに特別な役割を作るのも良いとは思いません。サイトが 100 個ある場合、ロールも 200 個あることになります。残念ながらかなり手に負えません。
私たちが同様のタスクを解決していたとき、標準のコントロールを使用していませんでした。すべてのサイトで単一のロール セットを使用していました。具体的なユーザーのメンバーシップは、現在のサイトおよびこのサイトとの関係に応じて決定されます。
追加:調査できるもう 1 つの可能性は、ASP.NET 認証システムに存在するアプリケーションです。各サブサイトを個別のアプリケーションに分離することは可能でしょうか?
アップデート: 私たちのアプリケーションで機能するメソッド。
複製されたロールを大量に作成しないでください。次の 2 つだけを使用します。ユーザーと管理者。サイトが公開されている場合、「ユーザー」ロールは単にグローバルになる可能性があります。あるサイトのユーザーは別のサイトのユーザーと変わりません。「ユーザー」と「全員」が異なる役割である場合、当然「ユーザー」もサイトにバインドされる必要があります。
標準の ASP.NET メンバーシップ ユーザーを使用しますが、標準のロール メカニズムは使用しません。
サイトとユーザーの関係を保存する仕組みを作ります。サイト ID、ユーザー、ロールを保持する単純なテーブルにすることもできます。
オーバーライドする必要があるのは IsInRole メソッドです。(方法s 正確には、後で説明します)。このメソッドは IPrinciple インターフェイスにあるため、独自のプリンシパル オブジェクトを作成する必要があります。とてもシンプルです。
- このタイプのメソッド IsInRole は、現在のサイト (HttpRequest から) を調べて、サイト ユーザー テーブルを調べ、ロールを取得する必要があります。
次に、プリンシパルをリクエストに関連付ける必要があります。PostAuthenticateRequest イベントで実行します。
ロールプロバイダーもあります。正直、いつ使われるのか分かりませんが、IsInRoleメソッドもあります。同じ方法でオーバーライドできます。ただし、このプロバイダーの他の方法はより困難です。たとえば、AddUsersToRoles。ユーザー名とロールの配列を受け入れますが、どのコンテキスト (サイト) に追加する必要がありますか?現在まで?このメソッドがいつ呼び出されるのかわからないため、わかりません。したがって、いくつかの実験が必要です。RopePrincipal 自体が、RoleProvider を使用してロールのリストを取得していることがわかります (Reflector が役に立ちます)。そのため、標準プリンシパルを使用して、RoleProvider のみを実装しているのかもしれません。私たちのアプリケーションではこれは当てはまらないため、ここにどのような問題が隠れているのかはわかりません。