2

私のasp.net Webフォームアプリケーションには、次のフォルダー構造があります。

_AdminUser
_ModeratorUser
_EmployeeUser
Images
js
css
ckeditor
App_Code
errorPages
Default.aspx
News.aspx
Article.aspx

これまでのところ、Web サイトのコンテンツを編集していたユーザーは 1 種類だけでした。以前は単純にユーザーを承認し、承認されたユーザーをフォルダー '_AdminUser' にリダイレクトしていました。

サイトに変更を加えることができます。

以下の web.config のコードは、問題なく動作するのに十分でした。

    <authentication mode="Forms">
      <forms loginUrl="~/_Login.aspx" timeout="2880"/>
    </authentication>

  <location path="_adminUser">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
  <location path="ckeditor">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

私の新しいプロジェクトでは、3 種類のユーザーを作成する必要があります

  1. 管理者ユーザー(スーパーユーザーであり、別のフォルダー内のすべてのファイルにアクセスできます)
  2. モデレーター ユーザー (このタイプのユーザーは、このフォルダー内のファイル_ModeratorUserとその他の一般的なフォルダーにのみアクセスできますが、_AdminUser または にはアクセスできません_EmployeeUser)
  3. 従業員ユーザー (このタイプのユーザーは、このフォルダー内のファイルにのみアクセスできます _EmployeeUser & other general folder but no access to_AdminUser or_EmployeeUser` )

これを実現するために、3 種類のロールを作成AdminModeratorましEmployeeた。新しいユーザーを作成するときに、それを特定の役割に割り当てます。上記のように、各役割が異なるフォルダーにアクセスできるようにします。

しかし、この種のロールベースのアクセス許可を達成できるように web.config ファイルを変更する方法がわかりません。私はそのようなチュートリアルを探していましたが、今のところ運がありません. 私が見た他のチュートリアルは、私の問題に対処していないようです。正しい方向へのポインタをいただければ幸いです。

4

3 に答える 3

0

ここには非常に優れたチュートリアルがあり、ユーザー、役割、権限を管理するためのツールをダウンロードすることもできます。ソース コードは、ページ下部の添付ファイル セクションからダウンロードできます。

于 2013-07-24T06:45:10.437 に答える
0

Web.Config 設定

  <!--Path: folder path -->
  <location path="_adminUser">
    <system.web>
      <authorization>
        <!-- Allow user who have Admin role can access the AdminUser folder aspx pages -->
        <allow roles="Admin"/>
        <!-- Other user can not access AdminUser folder aspx pages -->
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

  <!--Path: folder path -->
  <location path="_EmployeeUser">
    <system.web>
      <authorization>
        <!-- Allow user who have Client role can access the ClientUser folder aspx pages -->
        <allow roles="Employee"/>
        <!-- Other user can not access ClientUser folder aspx pages -->
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

ログインコントロールボタンの次のコードも作成しました

protected void Login1_LoggedIn(object sender, EventArgs e) { // ここでは User.IsInRole を使用しないでください。この段階ではまだ設定されていないためです。

if (Roles.IsUserInRole(Login1.UserName, "Admin"))
{
    Login1.DestinationPageUrl = "~/_adminUser/Default.aspx";
}
else if (Roles.IsUserInRole(Login1.UserName, "Heroes"))
{
    Login1.DestinationPageUrl = "~/_EmployeeUser/Default.aspx";
    }
}

上記のアプローチは私にとってはうまくいきますが、新しい役割が追加されるたびにコーディングする必要があるという欠点があります。ソリューションの 1 つに記載されているように、関連するための個別の web.config ファイルが機能していないかどうかはわかりません。

于 2013-07-25T05:59:31.590 に答える