2012-07-10 61 views
0

我目前正在創建一個應用程序,用戶可以在其中創建和申請作業。然而,由於我是相當新的軌道,我面臨着一個相當顯著安全特徵,如果任何用戶知道正確的路徑,例如:路徑安全和before_filters rails

localhost:3000/users/user_id/apps 

然後,他們可以看到任何用戶的任何工作提出的申請!

我相當肯定我需要使用before_filter來檢查current_user.id是否匹配在我的作業表中找到的每個作業的user_id或者匹配在我的應用程序表中找到的user_id。

我真的不知道如何構建這個過濾器,或者應用過濾器的位置 - 例如,最好在應用程序控制器中創建過濾器,然後在需要的地方應用一個skip_before_filter實例。

任何幫助的人可以提供有關構建此代碼,並將其放在哪裏將不勝感激!謝謝:)

回答

1

你開始尋找授權解決方案,如康康舞之前,一個簡單的辦法是避免做

App.find params[:id] 

由於某個應用程序相關聯的用戶,你已經有了CURRENT_USER的設置,你可以做

app = current_user.apps.find params[:id] 

哪個只會查找與用戶關聯的應用,無論查找哪個參數。

真正可以進入自己的地方就是當你需要一個更復雜的人時可以做什麼系統。例如,用戶可能能夠編輯他們創建的任何作業,但查看(而不編輯)另一組作業。

例如

can :manage, Project, :user.id => user.id 
can :read, Project, :department => user.department 

這將允許用戶完全訪問他們的任何項目,並在他們的部門

約康康舞另一件事讀取訪問權限的項目是,而不是散落before_filters或宏你的控制器你在一個地方聲明瞭規則,所以通常更容易看到發生了什麼。 cancan wiki上也有更多的信息載入一個railscast。