Ruby on Rails Tutorial 他ユーザーの情報は編集不可とする

「Ruby on Rails Tutorial」のサンプルアプリをAngularJSとBootstrap3を使う形にして作成します。前回、未ログインの場合はブラウザにユーザー編集のURLを直接入力してもユーザー編集画面を表示できないようにしました。しかしログインしていれば、他ユーザー情報も編集できてしまいます。できないように設定します。

1)Rails側のコントローラに設定追加
 
編集画面にアクセスする際にURLに指定されるユーザーのIDが、現在ログインしているユーザーのIDと一致しているかのチェックを行うメソッドを”update”のbefore_actionとして定義します。
 
$ vi app/controllers/users_controller.rb

class UsersController < ApplicationController
  before_action :correct_user,   only: [:update]

  private
    def correct_user
      user = User.find(params[:id])
      remember_token = User.encrypt(cookies[:remember_token])
      current_user ||= User.find_by(remember_token: remember_token)
      if current_user != user
        render status: :unauthorized
      end
    end

 
2)AngularJSコントローラ側の設定
 
下記のようにflashService.getUser()でサーバーから取得したログイン中のユーザIDがルートパラメータのIDと等しいかどうかチェックし、等しい場合のみユーザー編集画面を表示するようにしています。
 
$ vi app/assets/javascripts/mymodule.js.erb

myModule.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) {
     :

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です