株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。新規開発案件のご依頼をお待ちしております。

*

ASP.NETユーザ管理(その5)メンバー専用エリアと管理者ページ

   

0008ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の5回目です。前回は、ユーザ登録の項目を追加する方法を確認しました。今回はログイン済みのユーザのみが利用出来るエリアと管理者(特定のユーザのみ)が利用出来るページを作成してみます。引き続きWebFormsのテンプレートを使っていきます。ここでは制限にはWeb.configを利用します。

今回のソース一式はこちらです。今回の部分は(ISY03)ではじまるコメントを付けています。(※ユーザ登録時のメール送信処理も含まれています。必要な場合はお手数ですが、こちらを参照してメール送信のアカウントを設定するか、メール送信処理を削除して下さい。)

メンバー専用エリア
(ホーム)\Members\ というディレクトリをメンバー専用としてみます。

まず、前回の続きのプロジェクトでも、WebFormsテンプレートの初期状態のプロジェクトでもいいですが、Membersというディレクトリを追加します。
WS000017

テストのためのページを追加します。ここではマスタページを持つDefaultページを追加しました。
WS000021

次にWeb.configファイルを追加します。これは「Web 構成ファイル」の追加で追加出来ます。
WS000024

このWeb.configファイルに制限を記述します。初期状態のままでは、MembersフォルダのDefault.aspxがログインしていない状態でも表示されます。これをログイン済みのユーザ(=メンバーとして)のみにアクセスの許可を設定します。以下のように設定します。実際には、ログインしていないユーザを拒否するという記述です。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
</configuration>

このメンバーエリアのリンクをマスターページ(Site.maspter)のログイン済みテンプレートに作成します。

<LoggedInTemplate>
    <ul class="nav navbar-nav navbar-right">                
        <li><a runat="server" href="~/Account/Manage" title="Manage your account">Hello, <%: Context.User.Identity.GetUserName()  %> !</a></li>

        <%-- メンバー専用リンク追加--%>
        <li><a runat="server" href="~/Members">メンバー専用</a></li>
                           
        <li>
            <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="ログオフ" LogoutPageUrl="~/" OnLoggingOut="Unnamed_LoggingOut" />
        </li>
    </ul>
</LoggedInTemplate>

これでログインしていない状態では、Membersフォルダにアクセスするとログインページに移行されますが、ログイン後は、メンバー専用リンクからアクセス可能となります。

管理者ページの作成
メンバー専用の場合と同様に、例えば、Adminstratorフォルダを作成して、Default.aspxとWeb.configを作成します。そして、Web.configに以下の制限を記述します。以下の場合は、admin@mydomain.comというユーザ名のユーザ(これを管理者とする)のみにアクセスを許可するという記述です。(WebFormsのテンプレートがユーザ名=メールアドレスになっているのでそのように書いています。カスタマイズすればユーザ名とメールアドレスを別にすることも可能です。)
0010

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
      <authorization>
        <allow users="admin@mydomain.com"/>
        <deny users="*"/>
        <deny users="?"/>
      </authorization>
    </system.web>
</configuration>

これで、Adminstrator配下には、admin@mydomain.comというユーザのみがアクセス出来るようになりました。

この管理者ユーザをどう登録するかというと普通に登録画面から登録すればいいですが、ここでは、Seed()を試してみます。Seed()とは、前回のmigrationで、update databaseの際に実行されるデータの初期化のメソッドです。(ホーム)Migrations\Configuration.csにあります。但し、Migrationsフォルダは初期状態では存在していません。migration実行後に生成されます。

ここでは、この管理者ユーザを登録するように記述しました。

protected override void Seed(ASPNETWebFormsIdentity.Models.ApplicationDbContext context)
{
    //管理者の追加
    var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
   
    var adminUser =  new ApplicationUser()
    {
        UserName = "admin@mydomain.com",Email = "admin@mydomain.com",
            DispName = "Administrator", EmailConfirmed = true
    };

    var tmpUser = manager.FindByName("admin@mydomain.com");

    if (tmpUser == null) {
        manager.Create(adminUser, "adminPassword");
    }   
}

これで、Update-Databaseを実行すると毎回このSeed()が実行されます。

今回は、ここまでです。次回は、ロール管理の追加です。

今回のシリーズの一覧
ASP.NETユーザ管理(その1)identityフレームワーク
ASP.NETユーザ管理(その2)WebFormsでのASP.NET Identity
ASP.NETユーザ管理(その3)ユーザ登録時のメール確認
ASP.NETユーザ管理(その4)ユーザ情報の追加
ASP.NETユーザ管理(その5)メンバー専用エリアと管理者ページ
ASP.NETユーザ管理(その6)ロール管理の追加
ASP.NETユーザ管理(その7)ユーザアカウントロック
ASP.NETユーザ管理(その8) 2要素認証
ASP.NETユーザ管理(その9) パスワードのリセット

 - ASP.NET

AdSense

AdSense

  関連記事

ASP.NET Web APIでデータ蓄積(その3)ASP.NET ApiControllerクラス

ASP.NET Web APIでデータ蓄積の3回目です。前回は蓄積するデータとし …

ASP.NET Web APIでデータ蓄積(その6)ASP.NET Web APIでの動作確認

ASP.NET Web APIでデータ蓄積の6回目です。前回は、ASP.NET …

no image
ASP.NETユーザ管理(その9) パスワードのリセット

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の9回 …

no image
ASP.NETユーザ管理(その3)ユーザ登録時のメール確認

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の3回 …

no image
Microsoft AzureでSQL DBを使ってみる(その2)Azureでの公開

前回の続きです。Microsoft Azure(以下、Azureと表記します。) …

ASP.NET Web APIでデータ蓄積(その5)ASP.NET Web APIテンプレートからの構築

ASP.NET Web APIでデータ蓄積の5回目です。前回まででMVC個別に注 …

no image
ASP.NETユーザ管理(その4)ユーザ情報の追加

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の4回 …

温度管理システム的なものを作ってみる(その4)Cloudでの処理

温度管理システム的なものを作ってみるの4回目です。前回は、Androidアプリで …

no image
ASP.NETユーザ管理(その7)ユーザアカウントロック

ASP.NETユーザ管理(ASP.NET Identityフレームワーク)の7回 …

no image
Microsoft AzureでSQL DBを使ってみる(その1)概要とASP.NETサイトの作成

以下の投稿で、Microsoft AzureでASP.NETサイトを公開してみま …