before_filter,当前用户例外

时间:2012-12-09 03:13:57

标签: ruby-on-rails session authentication filtering before-filter

我在users_controller

中的过滤器之前有这个当前的
before_filter :authenticate_usergroup, :except => [:edit, :update, :show]

它非常适合仅允许用户编辑他们的信息但不能看到所有用户,但我发现只需更改他们在网址中的“ID”,他们也可以编辑其他用户信息。< / p>

我怎样才能允许:编辑,:显示和:更新当前用户的功能以获取自己的记录。我在我的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

2 个答案:

答案 0 :(得分: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',但它似乎具有阻止用户只需输入不同网址来查看其他用户信息的相同效果。

答案 1 :(得分:0)

如果您“范围”只有current_user可以访问其信息,则无关紧要。

所以在展示和编辑中

@user = current_user

在更新操作中就像是 current_user.update_attributes(params[:user]) 应该做的。