1
在我之前,過濾器,我稱之爲包含下面的代碼的方法:的Rails的before_filter檢查多個角色
authorized_for_roles :administrator
在我application_controller
def authorized_for_roles(*roles)
roles.each{|role_name| return true if current_user.role.name == role_name}
這似乎並不甚至要返回true登錄時與管理員角色一起。我的語法不正確?
如果我轉換的代碼只是讀
return true if current_user.is_an_administrator?
一切都很正常。有人能告訴我如何修改代碼來檢查is_an嗎?爲傳遞給該方法的每個角色?我希望能夠做到像
authorized_for_roles :administrator, :moderator
我試圖
但這並沒有工作。
編輯:改變行間距,使代碼片段格式爲這樣...
你是否在使用gem作爲角色?什麼是is_an_administrator?定義? – ronnieonrails 2011-05-20 17:13:41
我從Ernie Miller那裏得到 - [link] http://metautonomo.us/2008/09/30/easy-role-based-authorization/'code' def method_missing(method_id,* args)if match = matches_dynamic_role_check?( method_id)tokenize_roles(match.captures.first).each do | check |返回true如果role.name.downcase ==檢查結束返回false else超級結束私人def比賽match_dynamic_role_check?(method_id)/^is_an?_((a-a-Z]\w*)\?$/.match(method_id .to_s)end def tokenize_roles(string_to_split)string_to_split.split(/ _ or_ /)end – Joe 2011-05-20 19:30:00