Rails before_filter检查多个角色

时间:2011-05-20 17:05:48

标签: ruby-on-rails authorization roles 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

我试过

roles.each{|role_name|return true if current_user.try(:is_an, role_name)}

但这不起作用。

编辑:更改行间距,以便将代码段格式化为......

1 个答案:

答案 0 :(得分:2)

你想使用Enumerable#any?方法。在你的第一个例子中:

def authorized_for_roles (*roles)
  roles.any? { |role_name| current_user.role.name == role_name }
end