「Ruby on Rails Tutorial」のサンプルアプリをAngularJSとBootstrap3を使う形にして作成します。前回、未ログインの場合はブラウザにユーザー編集のURLを直接入力してもユーザー編集画面を表示できないようにしました。しかしログインしていれば、他ユーザー情報も編集できてしまいます。できないように設定します。
1)Rails側のコントローラに設定追加
編集画面にアクセスする際にURLに指定されるユーザーのIDが、現在ログインしているユーザーのIDと一致しているかのチェックを行うメソッドを”update”のbefore_actionとして定義します。
$ vi app/controllers/users_controller.rb
class UsersController
2)AngularJSコントローラ側の設定
下記のようにflashService.getUser()でサーバーから取得したログイン中のユーザIDがルートパラメータのIDと等しいかどうかチェックし、等しい場合のみユーザー編集画面を表示するようにしています。
$ vi app/assets/javascripts/mymodule.js.erbmyModule.controller("UsersNewCtrl", function($scope, userResource, $location, flashService, $routeParams, sessionResource, $q) { : : var deferred = $q.defer(); deferred.promise.then(function (result) { var user_info = result; if ($routeParams.id) { if (user_info.user.id == $routeParams.id) { :