2011-01-06 59 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

相關問題