0

現在、次の列を含む独自の「アクセス許可」テーブルを使用している Web アプリケーションがあります。

  • ユーザー名 - Windows ユーザー名 (Context.User.Identity.Name)
  • DivisionID - 部門テーブルへのリンク
  • RoleID - カスタム ロール テーブルから取得
  • RegionID - アプリケーションを国 (カナダ、米国、国際) に分割するために最近追加されたフィールド

ユーザーがサイトにログインすると、入力するリージョンを選択し、その特定の RegionID に権限が設定されているかどうかに基づいて、それらのリージョンへのアクセスを許可する必要があります。Region を選択すると、RegionID が Session に保存され、このパーミッション チェックとページへのデータの入力方法の定義に使用されます (すべてのページにまだ Session 変数を実装していないため、必要に応じて変更できます)。する必要があります)

私が最初に考えたのは、各ページでアクセス許可チェックを実行して、次の 3 つの宛先のいずれかに送信することです。

  • 無効な権限ページ (false)
  • リージョン選択ページ - セッションでリージョンが選択されていません (RegionID = 0)
  • リクエストされたページ - そのリージョンの権限が設定されている場合

Global.asax 内で Application_AuthenticateRequest メソッドを使用することも調べましたが、この領域内で Session を使用できず、Application_AuthenticateRequest を本来よりも多くヒットしているようです。

私の現在のアプリでは、アクセス許可に基づいて、対応する地域で各ユーザーを認証するための最良の方法は何ですか?

4

2 に答える 2

0

私は実際にはフォーム認証のみを使用しましたが、メンバーシップにはWindows認証を使用し、何らかの形式のカスタムロール認証を使用することを想定しています。私はそれをやったことはありませんが、うまくいくはずだと思うでしょう。

http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.getrolesforuser

正しい役割を返すために、RegionのSession値を考慮に入れるカスタムプロバイダーを作成できます。Webアプリケーションの場合、デフォルトのプロバイダーはロールを暗号化されたCookieとしてクライアントに保存します。似たようなことができると思います。

于 2012-05-16T21:05:28.830 に答える
0

通常、この方法はお勧めしませんが、すでにアプリケーションを開発しているように見えるので、あまり混乱することなく、次のものを比較的簡単に実装できます。

ページの基本クラスを作成し、アプリケーション内のすべてのページを基本クラスから継承します。もちろん、基本クラス内で「承認」を実装します。

これに関する1つのかなり厄介な問題は、基本クラスからページを派生させるのを忘れた場合、ページにセキュリティがないことです...しかし、「アクセス許可チェック」の実装を簡単に忘れる可能性があります.. ..

何かのようなもの

public class AuthorizedPage: System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
       // ... authorization logic here...

       // Be sure to call the base class's OnLoad method!
       base.OnLoad(e);
    }
}

ASP.net の「BasePage」クラスのアイデアと、http: //www.4guysfromrolla.com/articles/041305-1.aspxを確認できます。

または、別のアイデアとして、マスター ページを使用している場合は、マスター ページでこれを行うこともできます....

于 2012-05-16T20:12:07.207 に答える