職場実習20日目

今日はレビューの予定だったが、9月3日にまで延びたので、引き続きGrails作業を行う。

ユーザー別認証管理

ここで、データ追加・更新・削除の際にユーザー別に制限を行う。
そのための方法として、ログイン認証を行う方法と、データ変更時に認証キー入力を行う方法を思い付くが、Grailsによる雛型作成まではできても、ログイン管理まで行うのはハードルが高いと判断し、データ変更の度に認証を行う方法を取ってみる。

認証キーによる本人確認

そのために、各入力画面に認証キー入力を追加し、認証をパスした時だけ、データの追加・更新・削除ができるようにする。
認証キーはドメインフィールドに設置し、validatorで認証を行う。(validatorによる制約定義は、以前は失敗したが、ようやくできるようになった。)
しかし、作成者データを管理する所で、認証キー入力する事でしかデータを操作できないために、認証キーそのものを変えるのが難しい事と、作成者情報には公開すべきではない個人情報も含まれるため、認証キー無しで個人情報を閲覧できないようにする必要がある等、この方法には無理があると気付き、別の方法に変える。

ログイン・ログアウトによるアクセス権限の管理

ログイン認証を行うためのプラグインが既に用意されているらしい。
GrailsのAuthenticationプラグインによる認証(1/5):CodeZine
しかし、最初に使うならともかく、ある程度骨格ができあがったこの時期に、新しくプラグインによるログイン画面を生成するのは効率が悪いと判断し、先程の認証キーを扱う処理を作り変え、作成者ドメインコントローラーの中にloginアクションとして組み込む事にした。その後、loginビューも作る。また、logoutアクションは認証の必要が無いので、ビューは作らず、コントローラー内のアクションだけを追加する。

Grailsでは、特にサーブレットクラスをエクステンドしなくても、session属性がハッシュとして使えるので、userId(作成者ID)とloginId(ログインID)を登録するだけで、ログイン処理は設置完了。ログアウト処理は、sessionからuserIdとloginIdを消去するだけなので、ログインよりも簡単に設置できる。
次に、sessionからuserIdとloginIdを読み出し、作成者ドメインインスタンスフィールドid、loginIdと比較をする事で、データへのアクセスに制限を設ける事ができる。