2008年11月24日月曜日

第13.8回Grailsコードリーディング(その4) Grails本気の入門~2時間でいけるところまでライブコーディング!?をまとめてみました



でもって、この辺で「製造元の情報は表示はするけど、編集とか新規登録は一定の人間にしか触らせない」ということを実現するために、認証機能を付けてみます。


25.Acegiプラグインを入れる。
Acegiについては、第5回GCRの山本ざっくりメモを参照してください。
当日は、ver.0.3でやりました。
・Acegiのインストール

$ grails install-plugin /ダウンロードしたディレクトリ/grails-acegi-0.3.zip

・下記二つ実行

$ grails create-auth-domains
$ grails generate-manager

そうすると、grails-appの中に、いろいろ出来てきます。
でも今回は一切触りません。あるユーザ権限を持つユーザのみが??を操作できるというような感じにします。



この辺で、いちいちrun-appの度にデータがクリアされるのが面倒なのでDataSource.groovyをちょっとだけ書き換えて、登録したデータが残るようにします。

development {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop','update' //create-dropからupdateに変更
url = "jdbc:hsqldb:file:devDB;shutdown=true"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:mem:testDb"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
}


Acegi-pluginを入れたところからは、Grailsインストール+簡単な認証付きアプリをサックリ作成して動作確認。を参考にしてください。

今回の場合、Companyを触れるユーザと触れないユーザを分けたいので、
roleを「admin」「user」と2つ作って、適当な2人のユーザを作って、それぞれに割り当てます。最後にRequestmapで、/company/**をadminだけにすると、userのroleしか持ってないユーザは、そのページに行こうとしても「権限ないよ」と言われます。

で、適当なプロジェクトですけど、Morphに上げますので、そこで動作を見てください。



この辺で、TagLibをちょっと。というか、scaffoldしたときの日付表示が英語っぽいので、表示を逆にしたTagLibが社内にあったので、こっそり流用。山本師曰く、順番逆にしただけ、らしいです。
どこかにソースを上げておくと思うで、興味がある人はそこで見てみてください。
item.groovyの中のreleaseがDateなので、これを日本人が見てわかりやすいようにしてみます。
で、ここで、GSPがないと書き換えられないので、generate-allして、views/itemの下に、create.gsp
list.gsp
show.gsp
edit.gsp
を書き出します。


grails generate-all item



create.gspとedit.gspの下記をちょりっと修正します。

<!-- <g:datePicker
name="release"
value="${item?.release}" ></g:datePicker> -->
<ex:datePicker name="release"
precision="day"
years="${2000..2050}"
value="${item?.release}">
</ex:datePicker><br/>



こんな感じです。


もうひとつ、表示している方のshow.gspもちょりっと直します。

<!-- <td valign="top"
class="value">${fieldValue(bean:item, field:'release')}</td>
-->
<td valign="top" class="value">
<g:formatDate date="${item.release}"
format="yyyy/MM/dd" /></td>




これで、なんとなく違和感があったところが修正されました。

これぐらいで、一回Morphにアップしようと思います。
http://mkawa.morphexchange.com/
ここだと、URLにgcroneがつけられない?ので、HOMEとかクリックすると、出ません。適当にURLを変えてみてください。一通りできます。
ユーザも制限かけてないので作れます。

2 件のコメント:

匿名 さんのコメント...

参考にさせていただいています。

「表示を逆にしたTagLibが社内にあったので、(略)
どこかにソースを上げておくと思うで、興味がある人はそこで見てみてください。」

ex:datePickerのソースはどこでしょうか?

mkawa さんのコメント...

url = "jdbc:hsqldb:file:devDB;shutdown=true"
に変更