我有一个我正在研究的Rails 3网站,其用户使用“文档”进行操作。
如果每个文档都有user_id,那么对于我的文档控制器中的编辑方法,我可以将结果限制为当前用户拥有的文档,如下所示:
@doc = current_user.documents.find(params[:id])
respond_with(@doc)
不幸的是,事情并非那么简单。每个用户都可以通过中间“订阅”与文档建立关系 - 他们可以是所有者,编辑或读者。
现在,在我的编辑方法中,我希望能够将检索到的文档限制为所有者或编辑者。我该怎么做呢?目前我的文档模型中有一个范围,如:
scope :editable_by, lambda { |user| joins(:subscriptions).where("user_id = ? AND (subscriptions.role = ? OR subscriptions.role = ?)", user.id, Subscription::ROLES['owner'], Subscription::ROLES['editor']) }
这样我就可以进入我的编辑方法了:
@doc = Document.editable_by(current_user).find(params[:id])
有更好的方法吗?
答案 0 :(得分:1)
我认为你找不到更好的方法。例如,我倾向于使用CanCan进行授权,如果您的模型具有指示访问权限的属性(例如owner_id
),则仅提供内置辅助方法。
否则,您仍需要在模型上实现范围或方法。因此,除非我弄错了,否则你很难找到比现在更好的方式。