我试图开始测试以确认用户只能在current_user.id和model.user_id匹配时修改对象。
我觉得这是模型的验证。所以我可能会写一些类似的东西:
class UserLocked < ActiveModel::Validator
def validate(record)
unless record.user_id == current_user.id
record.errors[:name] << "Sorry you cannot modify something that is not your's"
end
end
end
哪个可能没问题...... (我可以把它放在一个集中的地方吗?我需要做一些特别的事情来引用它吗?)
为此编写测试也不算太糟糕;但是,我还需要阻止控制器显示表单以编辑表单。我应该创建一个单独的视图还是只是让它成为编辑页面的一部分?我如何在rspec中为此编写测试...
我可能在想这个,但我想弄清楚其他人在做什么。一个例子会很棒!我以前在其他语言/框架中做过这个,但我想“以正确的方式做事。”
谢谢!
答案 0 :(得分:1)
授权属于控制器而不属于模型。所以你可以像这样实现一个before_filter:
class UsersController < ApplicationController
before_filter :correct_user, only: [:edit, :update]
...
private
def correct_user
@user = User.find(params[:id])
redirect_to root_path unless current_user? @user
end
end
当然,您需要某种方法来检测当前用户是谁。
您可以使用RSpec&amp;水豚。逻辑很简单:您使用用户登录并期望在尝试编辑其他用户的信息时显示错误消息。否则,应显示相关的表单字段。