Ruby on Rails:Cancan - 限制儿童创作

时间:2014-07-03 14:22:54

标签: ruby-on-rails cancan

我在使用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中的父提交。任何建议都表示赞赏。

1 个答案:

答案 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策略。你不应该这样做 谈论授权限制的原因。