1

我的 users_controller 中有这个过滤器之前的电流

before_filter :authenticate_usergroup, :except => [:edit, :update, :show]

它非常适合仅允许用户编辑他们的信息但无法查看所有用户,但我发现只需更改他们在 url 中的“id”,他们还可以编辑其他用户信息。

我如何只允许当前用户使用 :edit、:show 和 :update 函数作为他们自己的记录。我的 application_controller 中有这个方法可以访问当前用户

def current_user
 return unless session[:user_id]
 @current_user ||= User.find_by_id(session[:user_id])
end

#update from users_controller.rb
def update
@user = User.find(params[:id])

respond_to do |format|
  if @user.update_attributes(params[:user])
    format.html { redirect_to @user, :notice => 'User was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render :action => "edit" }
    format.json { render :json => @user.errors, :status => :unprocessable_entity }
  end
end
end
4

2 回答 2

1

我是这样做的:

在控制器中的#show 操作中:

if current_user.id == Certificate.find(params[:id]).user_id
  @certificate = Certificate.find(params[:id])
else
  redirect_to certificates_url, notice: 'You can only view your own certificates'
end

我知道它没有使用“before_filter”,但它似乎具有相同的效果,即阻止用户简单地输入不同的网址来查看其他用户信息。

于 2013-09-02T19:37:46.313 回答
0

如果您“限定”只有这些current_user人可以访问他们的信息,那没关系。

所以在显示和编辑中

@user = current_user

在更新操作中,类似的东西 current_user.update_attributes(params[:user]) 应该可以解决问题。

于 2012-12-09T03:22:20.127 回答