Scalaのアプリケーションフレームワーク"Lift" (3: SiteMap)
Scalaのアプリケーションフレームワーク"Lift" (2: アプリ構築)
は作者の都合により、後日に掲載します。
SiteMapの役割
- ページのアクセス権限管理
- ページのグループ化
SiteMapの定義はBootクラスのboot関数で行われ、 アプリの立ち上げ時に一度だけ読み込まれます。
SiteMapの定義方法(Simply Lift バージョン)
//返り値がSiteMap型の関数を定義 def sitemap():SiteMap = ... //setSiteMapFuncの引数に、定義した関数を実行する関数オブジェクトを与える。 LiftRules.setSiteMapFunc(() => sitemap())
SiteMapの定義方法(デフォルトプロジェクトバージョン)
//List[ConvertableToMenu]を定義、setSiteMapの引数に変換。 val entries = List(Menu.i("Home") / "index", Menu.i("SP Home") / "sp" / "login") LiftRules.setSiteMap(SiteMap(entries: _*))
こっちのほうがオススメです。
setSiteMapをコメントアウトすれば、アクセス管理は行われません。
SiteMapの実態
SiteMapはMenuのインスタンスのコレクション。
MenuはLoc[_]と複数のMenuインスタンス(0~n)をサブメニューとして持つ。
メニューはそれぞれ固有の名前を持つ。
Menu.iメソッドはLoc[Unit]を持つMenuインスタンスを生成する.
サブメニュー、グループ化、アクセス管理
//サブメニュー Menu.i("Info") / "info" submenus( Menu.i("About") / "about", Menu.i("Contact") / "contact") LiftRules.setSiteMap(SiteMap(entries: _*)) //グループ化<span class="lift:Menu.group?group=bottom"></span>こんな風に使うらしい Menu.i("About") / "about" >> LocGroup("bottom") //アクセス管理 //ログインしていなかったら、ログイン画面に飛ばす、などを制御。(この場合は強制で飛ばしている) //実際はSessionVarを継承したobjectなどを使って、ログインしているかを確認する。 val hasLogined_? = If(() => true, () => RedirectResponse("/login")) Menu.i("Home") / "index" >> hasLogined_?
まとめ
原則、LiftではBootクラスでアクセス可能なhtmlを指定し、 必要に応じて、詳細なアクセス権限を定義します。
グループ化や、サブメニューなども定義できますが、 フッターやヘッダーはどうせテンプレートを使って一度しか定義しないので、 わざわざ使うことあるかなぁという感じです。
アクセス管理はSessionVarが出てきてからでないと、 イメージがわかないと思いますが、中々便利です。
SiteMap周りは下手に機能が充実している分、 かえって扱いにくくなってる気がします。
アクセス管理に集中して利用するのが吉。