2014-03-01 47 views

回答

2

沒有,現在你不能通過這樣的選項。

user.has_role?(:admin, :moderator) 

如果你想保存自己從執行多個查詢,你可以這樣做

(user.roles & [:admin, :moderator]).present? 
1

rolify有has_any_role?has_all_roles?方法是做到這一點相當可讀。 has_any_role?只碰到DB一次,但has_all_roles?看起來像它迭代了調用has_role?的參數,這樣就不會完全解決您關於多次擊中DB的問題(它在遇到第一個否定結果時停止,這總比沒有好)。

它看起來像你對我可以檢查,如果用戶在一個查詢中使用了兩種角色:

user.roles.where("name IN (?, ?)", "admin", "moderator").size > 1 

如果用戶可能對不同的資源相同的角色那是不行的,但你這個想法。另一個問題是它難以編碼您檢查的角色數量。你可以通過構造參數列表並使用send來解決這個問題,但它會很糟糕。或者,如果您知道您檢查的值是安全的,則可以將它們放在一個陣列中,並執行以下操作:

roles_to_check = ["admin", "moderator"] 
user.roles.where(name: roles_to_check).size >= roles_to_check.size 
相關問題