Myページ
ホーム
コミュニティの人々
ソフトウェア
技術紹介
適用分野
Tyzohとは
ご意見お問い合わせ

V.S.A. III

[Secure-SBM:014] 各コントロールへの認証

こんにちは,五十嵐です.全体像を見ながら (「[Secure-SBM:002] 全体像」 参照) ,admin 用の認証を追加します.全体の認証は lib/SecureSBM.pm の auto アクションで行いました ( 「[Secure-SBM:012] いよいよ認証」 参照) ので,Admin のコントロールに auto アクションを追加します.auto アクションの役割については 「[Secure-SBM:013] ひと休み」 をご覧ください.

lib/SecureSBM/Contoroller/Admin.pm:
sub auto : Private {
        my ( $self, $c ) = @_;

        if( $c->user_exists ){
                if( $c->user eq 'admin' ){
                        return 1;
                }else{
                        $c->res->redirect($c->uri_for('/personal'));
                        return 0;
                }
        }
        $c->res->redirect($c->uri_for('/'));
        return 0;
}
まず,認証が済んでいるかどうかを "$c->user_exists" で確認します.認証が済んでいなければ '/' へリダイレクト,済んでいても 'admin' ユーザではなければ '/personal' へリダイレクトします.admin ユーザだけが,このコントローラで定義したアクションを利用することができます.

同様に Login.pm も変更します.
lib/SecureSBM/Controller/Login.pm:
@@ -42,7 +42,7 @@
                        if( $loginname eq 'admin' ){
                                $c->res->redirect($c->uri_for('/admin'));
                        }else{
-                               $c->res->redirect($c->uri_for('/')); 
+                               $c->res->redirect($c->uri_for('/personal')); 
                        }
                        return;
                } else {


lib/SecureSBM/Controller/Root.pm には,これ以上アクションを追加しないようにします.認証を必要としないアクションは,Nonauth::Bookmark, Nonauth::Profile を新たに追加して,これに記述していくようにします.
$ ./script/securesbm_create.pl controller Noauth::Bookmark
created "...(省略)/lib/SecureSBM/Controller/Noauth"
 exists "...(省略)/t/Controller"
created "...(省略)/lib/SecureSBM/Controller/Noauth/Bookmark.pm"
created "...(省略)/t/Controller/Noauth-Bookmark.t"
$ ./script/securesbm_create.pl controller Noauth::Profile
 exists "...(省略)/lib/SecureSBM/Controller/Noauth"
 exists "...(省略)/t/Controller"
created "...(省略)/lib/SecureSBM/Controller/Noauth/Profile.pm"
created "...(省略)/t/Controller/Noauth-Profile.t"
$ 

Personal コントローラを追加します.
$ ./script/securesbm_create.pl controller Personal
 exists "...(省略)/lib/SecureSBM/Controller"
 exists "...(省略)/t/Controller"
created "...(省略)/lib/SecureSBM/Controller/Personal.pm"
created "...(省略)/t/Controller/Personal.t"
$ 

Noauth コントーラ下のアクセスでは認証が必要ないように,Root::auto に Noauth コントローラかどうかを判断する条件文を追加します.

lib/SecureSBM/Controller/Root.pm:
sub auto : Private {
        my ( $self, $c ) = @_;

        # Controller が Login,Root,Noauth の場合には,認証を必要としない
        if ( $c->controller eq $c->controller('Login')
                || $c->controller eq $c->controller('Root')
                || $c->controller eq $c->controller('Noauth')
        ){
これで,認証が必要な部分と必要ない部分を明確に分けることができるようになりました.

/bookmark でアクセスするブックマークリストを簡単に作っておきます.

lib/SecureSBM/Controll/Noauth/Bookmark.pm:
sub bookmark : Path('/bookmark') {
        my ( $self, $c ) = @_;

        $c->stash->{pagetitle} = 'Secure-SBM 最新ブックマークリスト';
        $c->stash->{template} = 'noauth/bookmark.tt';

        if( my $rdb = 
             $c->model('SecureSBMDB::Role')->find( {role_name => 'public'} )
          ){
                $c->stash->{bookmarks} = $rdb->bookmarks
        }
}
role が public のブックマークのみを抜き出しています.スキームの設定時に bookmarks を many_has_many で設定しているので,bookmarks データベースへのアクセスが非常に簡単になっています.

center 部分のテンプレートは次のようになります.

root/template/noauth/bookmark_center.tt:
<h1>ブックマーク リスト</h1>
[% FOREACH v_bookmark = bookmarks.all -%]
<div class="each_bookmark" 
      id="public_bookmark[% v_bookmark.bookmark_id %]">
<a href="[% v_bookmark.bookmark_uri %]">[% v_bookmark.bookmark_title %]</a>
</div><!-- end of public_bookmark[% v_bookmark.bookmark_id %] -->
[% END %]

画面はこんな感じ.
もう少し細かく設定しなければなりませんが,当初はこれでいいでしょう.

次に,/personal ページ.これは各ユーザ用のトップページになります.これも簡単に設定しておきましょう.

lib/SecureSBM/Controller/Personal.pm:
sub auto : Private {
        my ( $self, $c ) = @_;

        if( $c->user_exists ){
                return 1;
        }

        $c->res->redirect($c->uri_for('/login'));
        return 0;
}

sub personal : Path('/personal') {
        my ( $self, $c ) = @_;

        if( my $udb = 
             $c->model('SecureSBMDB::User')->find( {user_email => $c->user} ) 
         ){
                $c->stash->{user} = $udb;
        }
        $c->stash->{pagetitle} = 'Secure-SBM User Top Page';
        $c->stash->{template} = 'personal/personal.tt';
}
auto のアクションは冗長ではありますが,設定しておきます.

center 部分のテンプレートは次のようになります.

root/template/personal/personal_center.tt:
<h1>ユーザページ</h1>
[% IF user -%]
ようこそ [% user.user_surname %] [% user.user_name %] さん.
[% END -%]
簡単に Welcome メッセージを出しておきます.

最後に,logout ができるようにしておきましょう.Logout アクションは既に作成済み (「[Secure-SBM:012] いよいよ認証」 参照) ですので,メニューにリンクを追加するだけです.Login した状態と Login していない状態で,トップのメニューの表示を変えるように設定します.

root/template/top.tt には既に以下のような設定がしてあります.
[% IF logintoggle %]
[% logintoggle %]
[% ELSE %]
<a href="/login">Login</a>
[% END %]

この logintoggle を設定すれば良いことになります.そこで,Root::auto でこの logintoggle を設定します.

lib/SecureSBM/Controller/Root.pm:
@@ -32,6 +32,13 @@
        $c->log->debug( '*** Controller [' . $c->controller . '].' );
        $c->log->debug( '*** action [' . $c->req->action . '].' );
 
+       # ログインしているか否かでメニューを変更する.
+       if ($c->user_exists) {
+               $c->stash->{logintoggle} = '<a href="/logout">Logout</a>';
+       }else{
+               $c->stash->{logintoggle} = '<a href="/login">Login</a>';
+       }
+
        # Controller が Login,Root,Noauth の場合には,認証を必要としない
        if ( $c->controller eq $c->controller('Login')
                || $c->controller eq $c->controller('Root')
ログインしていれば "Logout" のメニュー,ログインしていなければ "Login" のメニューを表示します.

これで,大まかな認証の設定は終わりました.次回以降はもう少し細かい設定をおこなっていきます.

2007/03/26 記

参考:

Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク

カテゴリ:SBM , 開発日記

タグ:

いかちょー (2007-06-18 13:14) | コメント(0)| トラックバック(6)

トラックバック(6)

トラックバックURL:

Buy amoxicillin with no prescription. - Buy amoxicillin without prescription. (2009年12月21日 15:43)

Buy amoxicillin without prescription. Buy amoxicillin with no prescription. 続きを読む

Tadalafil. - Tadalafil fedez. (2010年2月16日 18:57)

Tadalafil. 続きを読む

Male infertility and propecia. - Buy propecia international pharmacy. (2010年2月17日 00:37)

Propecia. Propecia pill. 続きを読む

Buy ambien. - Ambien generic. (2010年2月19日 23:10)

Ambien cr. Online ambien. Ambien. 続きを読む

Buy ultram from discount store. - The mondego group wiki xwiki buy ultram. (2010年5月19日 23:56)

Buy ultram cheapest site. Ultram buy ultram online order cheap ultram. Buy ul... 続きを読む

Buy cheap tramadol mg tablets only in us online. - Buy tramadol. (2010年5月24日 18:18)

Buy tramadol. 続きを読む

コメント

コメントを投稿

名前

電子メール

URL

ログイン情報を記憶

コメント

プロフィール

いかちょー

いかちょーこと五十嵐智です。
情報セキュリティ分野に興味があります。
一応、CISSP ホルダー。

SF者です。どうぞよろしく。

プロフィール詳細 (Google プロフィール)

RSSフィード

コミュニティの人々 | ソフトウェア | 技術紹介 | 適用分野 | Tyzohとは | ご意見お問い合わせ

Copyright (C) 2004-2010 Nihon Unisys, Ltd. All Rights Reserved.
Powered by Movable Type Open Source