6

我有一個組資源,我嘗試使用適當的授權進行設置。正確用戶和管理員的多個before_filter語句

我想實現授權邏輯是這樣的:

  1. 只有小組成員應能查看他們的小組。
  2. 管理員可以查看任何組,並採取其他操作。

我試圖與該組控制器中執行以下語句的before_filter做到這一點:

before_filter :signed_in_user 
before_filter :correct_user, only: :show 
before_filter :admin_user, only: [:show, :index, :edit, :update, :destroy] 

Correct_user工程,我已經驗證了,只有組成員可以查看他們的小組。但是,我想要發生的是admin:show子句來覆蓋此,以便管理員可以查看任何組。目前,這是行不通的。我猜我的過濾器訂購和選項有些問題。

有人能告訴我我哪裏出了問題嗎?

編輯

每阿馬爾的請求添加我的方法的代碼:

private 

def correct_user 
    # User has to be a member to view 
    @group = Group.find(params[:id]) 
    redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil? 
end 

def admin_user 
    redirect_to(root_path) unless current_user.admin? 
end 
+0

嘗試admin_user在過濾器之前過濾correct_user或在show action中爲管理員用戶和其他人制定條件 – Amar 2012-04-14 15:27:54

+0

謝謝Amar。我試圖將admin_user過濾器放在correct_user上面,但沒有解決它。我可以把這個條件放在動作中,但是想看看是否有辦法用before_filter來做到這一點。 – pejmanjohn 2012-04-19 00:21:49

+0

通過我上面寫的方式進行進一步檢查時,過濾器要求用戶既是管理員又是管理員,正確的用戶才能查看組。我希望它是或 – pejmanjohn 2012-04-19 17:17:40

回答

2

更新correct_user方法或創建如下定義的另一種方法,從其他過濾器除去表演,並與新的方法添加的before_filter 。

def correct_user 
    @group = Group.find(params[:id]) 
    redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil? && !current_user.admin? 
end 
+0

剛剛經過測試,這很好。我需要在布爾語句之間添加一個「&&」。 – pejmanjohn 2012-04-24 16:54:43

相關問題