我在使用Cancan gem的Rails 4上。我有三个与此问题相关的模型:
Users:
has_many :submissions
has_many :submission_details, through: :submissions
Submissions:
belongs_to :user
has_many :submission_details
SubmissionDetails
belongs_to :submission
用户可以创建新的提交,然后创建其子提交详细信息。用户无法编辑不属于他/她的提交/提交详细信息,并且用户无法向不属于他/她的提交添加新的提交详细信息(通过{{1} })。路由:
:user_id
所以,这是我的问题。我已经能够限制某人编辑不属于他或她的提交详细信息(通过其父提交resources :submissions do
resources :submission_details
end
列):
:user_id
但是,如果用户尝试为不属于他/她的父提交创建新的提交详细信息,则此操作无效。比如,如果某人更改了URL中的父ID:
can [:show, :update, :create], SubmissionDetail, submission: {user_id: user.id}
我认为这是因为尚未创建提交详细信息以了解表中的父ID(即使它在URL中)。理想情况下,我希望这个人能够立即远离这个"新的提交细节"页面,如果他/她不拥有URL中的父提交。任何建议都表示赞赏。
答案 0 :(得分:1)
诀窍是在创建提交细节之前加载提交
submission = Sumbmission.find(params[:submission_id])
submission_detail = submission.detail.build(params[:submission])
authorize! :create submission_detail
submission_detail.save
要远离用户,请参阅Exception Handling 。无论授权何时发生,我都会在索引页面上实现一些一般的ridirect策略。你不应该这样做 谈论授权限制的原因。