これは、フォーム認証を使用した MVC 4 インターネット プロジェクトに関する問題です。ホテルがあり、許可されたユーザーが異なる役割でそれぞれにアクセスしたいとしましょう。
そのため、ユーザーはログインします。次に、ドロップダウンリストから対象のホテルを選択すると、アプリケーションのセキュリティがそれに応じて応答します。
[Authorize(Roles = "Administrator")] のようなものが必要ですが、そのホテルのスコープでのみ必要です。
私の最初のアプローチは AuthorizeAttribute から継承し、このスレッドに示されているように AuthorizeCore をオーバーライドすることでした
そこから HttpContext.Session["HotelId"] を取得し、UserRolesInHotel テーブルにクエリを実行できます。つまり、UserId、RoleId、HotelId に似た構造を持つ独自のロール テーブルが必要です。そのため、SimpleRolePrivider ではこのタスクを実行できず、CustomeRoleProvider を作成する必要があります。RoleProvider メソッドは、新しいロールをユーザーに追加するときに HotelId のように必要なため、追加のパラメーターを処理しません。
明確にするために:
- ユーザー A がユーザー/パスワードでログイン -> OK (SimpleMembershipProvider)
- 認証されたユーザー A がホテル 1 を選択 -> ユーザー A はホテル 1 の「管理者」です。
- 認証されたユーザー A がホテル 2 に変更 -> ユーザー A はホテル 2 の「ユーザー」
ホテルはいくつでも持つことができます。
- ユーザー A -> ホテル 1 -> { "管理者", "ユーザー"}
- ユーザー A -> ホテル 2 -> { "ユーザー" }
- ユーザー A -> ホテル 3 -> { "所有者" }
- ユーザー A -> ホテル 4 -> { "管理者" }
役割のリストは常に同じです。
私はこの実装に数日間苦労してきましたが、実用的な解決策を思いつくことができませんでした. どんな考えでも大歓迎です。
ありがとう!