3

私は MembershipProvider を使用しており、現在、ユーザー、スーパー ユーザー、管理者の 3 つの役割があります。

また、管理者とスーパー ユーザーのみが表示できるページもあります。これらのページでは、Web 構成で構成を使用します。

  <location path="Users.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin, Super User"/>
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

そして、これは完全にうまく機能します。

しかし、私はたくさんのページを持っています

Evaluations
Actions
Reports
Files

別のアクセスが必要です。各ページへのアクセスを個別に許可したい。

ページごとに役割を作成し、これらの役割に割り当てるよりも良い方法はありますか?

PS MVCではなくASP.NETを使用しています

4

3 に答える 3

2

はい、フォルダ構造を次のように変更します。

- Super User
  - Admin
    - All

そして、あなたはこのようなことをすることができます:

<location path="Super User">
  <system.web>
    <authorization>
      <allow roles="Super User"/>
      <deny users="*" />
    </authorization>
  </system.web>
</location>

<location path="Super User/Admin">
  <system.web>
    <authorization>
      <allow roles="Admin"/>
      <deny users="*" />
    </authorization>
  </system.web>
</location>

<location path="Super User/Admin/All">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

そして、ページを適切なフォルダに配置するだけです。MSDNドキュメントによると、location要素はすべてのサブディレクトリに適用されます。

含まれている構成設定が適用されるリソースを指定します。パス属性が欠落している場所を使用すると、構成設定が現在のディレクトリとすべての子ディレクトリに適用されます。locationがパス属性なしで使用され、allowOverrideがFalseの場合、子ディレクトリにあるWeb.configファイルによって構成設定を変更することはできません。

したがってSuper User、定義上、以下の他のすべてのページにアクセスできます。

于 2012-12-28T13:33:09.410 に答える
1

はい、もっと簡単な方法があります。制限されているすべてのページを別のフォルダーに配置し、このフォルダーに追加のweb.configを作成します。この追加のweb.configには、認証セクションのみが含まれている必要があります。

ランタイムは、リクエストフォルダーからアプリケーションルートまでのweb.configsを評価します。この追加のweb.configには認証セクションが存在するため、ルート認証セクションが上書きされます。

このようにして、単一の設定(単一のweb.config)で、任意の数のファイル(ディレクトリ内のすべてのファイル)を保護できます。

于 2012-12-28T13:32:48.740 に答える
1

<location>要素を使用する代わりに、フォルダーにアクセス許可を割り当てることもできます。このようにして、多数のページを1つの権限セットにグループ化できます。また、コードで権限を検証することもできます。global.asaxでは、application_postauthenticaterequestは、サーバーへのリクエストごとに(つまり、aspxページごとに)実行されます。ここにコードを記述して検証を行い、ユーザーに権限がない場合はリダイレクトすることができます。

于 2012-12-28T13:33:39.317 に答える