Rails - 如何检查散列中的键和值是否匹配给定参数?

时间:2015-09-02 19:41:31

标签: ruby-on-rails ruby hash key

我正在使用Rails 4应用程序中的简单授权。每个用户都有一个角色;然后我设置了他们可以访问的页面,例如:

AUTH_MODERATOR_DEFINITIONS = {"articles"     => "index",
                              "readers"  => "index"}

然后,在控制器动作中,我将调用:

def index
  check_permissions(current_admin)
  ...
end

ApplicationController

  def check_permissions(current_admin)
    if current_admin.role == 1 # for moderators
      # find a pair key-vale AUTH_DISPATCHER_DEFINITIONS that matches `params[:controller]` and `params[:action]
    else
      redirect_to root_path, :alert => "No permission"
    end
  end

但是如何根据关键的AND值搜索哈希?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以这样做:

key = params[:controller]
value= params[:action]
p is_permitted = (AUTH_MODERATOR_DEFINITIONS[key] == value)

但是,我认为您可能会在某个时刻将哈希值中的值修改为数组,因为控制器不太可能只有一个操作,因此用户可以访问多个操作。例如:

AUTH_MODERATOR_DEFINITIONS = {
    "articles" => "index",
    "readers"  => "index",
    "commenters"  => ["index","new","update"] # Added by me to show possible use case
}

考虑到上述情况,我认为你可以做这样的事情。这将适用于两种情况(您的示例,以及我对该示例的扩展)

key = params[:controller]
value= params[:action]

p is_permitted = [AUTH_MODERATOR_DEFINITIONS[key]].flatten.include?(value)