こんにちは五十嵐です.今回は全体としてどのような動きを実現するのか考えます.

左図が全体像です.大きく分けて認証を必要とする部分と認証を必要とせずにアクセスできる部分に分けられます.認証を必要とする部分では,admin かどうかでアクセスできる範囲が異なります./admin の部分は,ユーザ admin 以外ではアクセスできないようにします.
一般ユーザは認証を行うと "/personal" という画面に遷移します.ユーザによって表示される内容は異なりますが,ブックマークの一覧が表示されるという点は同じです.個人がブックマークしたものは基本的にすべて見ることができますが,個人が属するロールとブックマークが異なる場合には見ることができません.ブックマークの登録後,なんらかの操作 (例えば,admin がロールを変えるなどの操作)によってブックマークのロールが変わってしまった場合には,自分が登録したものであっても見られなくなる可能性はあります.
トップページやユーザのプロフィール,ユーザのブックマーク画面は,認証なしで見ることができます.ただし,プロフィールを公開するかどうか,ブックマーク一覧を公開するかどうかを各ユーザが選択できるようにし,それにしたがって,アクセス制限を行います.認証を行わなずに閲覧できるブックマークは,public に属しているブックマークのみになります.
図に入れ忘れましたが各ページからブックマークとタグの検索をできるようにします.出力はそれぞれの認証レベルにあわせて表示します.

左図はユーザから見たブックマークのイメージ.ユーザがログインすると自分が登録したブックマーク一覧が見えます.ブックマークそれぞれにはロールがあり,自分と同じロールに属していないとブックマークを閲覧することができません.それぞれのブックマークにはタグを付けることができます.タグを共有するためにタグ自身も一元管理されています.そのなかから,自分が使用可能なタグを取り出して,ブックマークにタグづけします.新たに付けたタグのつもりが,誰かと共有しているタグになっているかもしれません.
ブックマークも共有することになります.これが一番の目的です.同じブックマークをどれだけのひとがブックマークしているのか,という数値がひとつのバロメータとしての役割をもっています.これがないと,単なる個人のブックマークストックとなんら変わるところはありません.もちろんユーザが望めば,だれがそれをブックマークしているのかを知らせないようにすることは可能ですが,参照数は表示させます.
以上が全体構造です.もっと細かい部分は部分部分で詰めていく必要がありますが,これらを念頭において,構造的にアプリケーションを組んでいきます.
さて,話を認証に戻してみると,認証されたユーザのトップページは "/personal" になります.ID がそれぞれ違うのにどうやって実現するのかというところがちょっと面白いところですね.ログイン時のユーザ名(emailアドレス)から,ユーザ ID (user_id) を引っ張りだし,その番号で処理を変えてみようと思います."/personal/2" というようなやりかたの方が簡単ではありますけれど...簡単過ぎると面白くないかもしれないので.他のひとのブックマークのページを見たければ,/bookmark/3 といった,ID を持った URL を指定させることにします.番号なしの "/bookmark" だけを指定したときには,不特定の最新のブックマークの一覧でも見せるようにしようと考えています.
認証に失敗したらホームのトップページ "/" へ飛ばし,認証に成功しても admin 以外が /admin にアクセスしようとした場合には /personal へ飛ばす.という動きにしたいと思います.
参考:
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
カテゴリ:SBM , 開発日記
タグ:Secure-SBM
<< TGIF: 情報の視覚化 | Main | [Secure-SBM:003] 風呂敷 >>