-1

私はレールにかなり慣れていません。ユーザーアカウントを含む小さなアプリケーションを開発しています。現在、ユーザーは名前、電子メール、およびパスワードを変更/更新できます。ユーザーにも一意のユーザー名がありますが、ユーザーが変更できないようにしたいと思います。これを防ぐにはどうすればよいですか?

サインアップ時に作成できるように、attr_accessibleにユーザー名を含めましたが、ユーザー名が表示されたら、どういうわけかこれを削除したいと思います。私がこれまでに持っている唯一の制限は、ユーザー名編集フォームがないことですが、これによってクリエイティブユーザーがPUTリクエストを発行して変更するのを止めることはできません。

4

2 に答える 2

2

update_attributesこれを行う最も簡単な方法は、以下のように、パラメーターが関数に渡される前に、コントローラーの更新アクションでパラメーターを削除することです。

#UsersController
def update
  params[:user].delete(:username)
  @user = user.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:notice] = "Successfully updated user."
    redirect_to @user
  else
    render :action => 'edit'
  end
end

または、このRailsCastに示すように、動的一括割り当てセキュリティを使用することもできます。この要点は、モデルの関数をオーバーライドして、mass_assignment_authorizer一括割り当てにアクセスできるようにする属性を追加することです。そのアイデアを使用すると、次のようなことができます。

class User < ActiveRecord::Base
  attr_accessible #what ever other stuff you wan't to accessable

  private
  def mass_assignment_authorizer
    new_record? ? super + [:username] : super
  end
end
于 2012-07-14T02:04:00.467 に答える
0

試行された変更を元に戻すだけです...

class User
  before_update :revert_username_if_changed, :if => Proc.new { |u| u.username_changed? }

  def revert_username_if_changed
    self.username = self.username_was
  end
end
于 2012-07-14T02:14:35.023 に答える