2011-01-06 56 views
2

我有一个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]) 

是否有更好的办法吗?

回答

1

我不认为你会找到更好的方法。例如,我倾向于使用CanCan进行授权,如果您的模型具有指示访问权限的属性(例如owner_id),则该授权仅提供内置的帮助方法。

否则,您仍然需要在模型上实现范围或方法。所以除非我错了,否则你很难找到比现在更好的方法。

+0

Ta。那我就去吧。很高兴知道我有点正确。 – kmc 2011-01-14 11:19:59

相关问题