我在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
答案 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])
应该做的。