Rails gem pundit

时间:2017-10-24 18:36:52

标签: ruby-on-rails pundit

我有以下哈希:

MAPPING = {
   create: [:admin],
   update: [:admin],
   delete: [:admin],
   index: [:all]
}

我需要在策略类中动态创建pundit方法。 我需要搜索映射哈希所有具有管理角色的项目并创建策略方法:

def create?
   true
end

def update?
   true
end

这样我就不必一直重复这段代码。 我怎样才能做到这一点 ? 感谢。

2 个答案:

答案 0 :(得分:0)

下面的代码为每个键包含:admin的值定义了一种方法。方法的名称是键,强制转换为字符串,并附加问号。每个定义的方法都返回true

MAPPING.each do |action, roles|
  define_method("#{action}?") do
    true
  end if roles.include?(:admin)
end

答案 1 :(得分:0)

这是我正在使用的代码:

    class CarPolicy < ApplicationPolicy
      attr_reader :user, :record

      def initialize(user, record)
        @user = user
        @record = record
      end

      PERMISSION_KEY_MAPPING = {
        index: [:admin]
      }

      PERMISSION_KEY_MAPPING.each do |action, roles|
        define_method("#{action}?") do
          true
        end if user.roles.include?(:admin)
      end
    end

该行:

end if users.roles.include?(:admin)

不起作用,因为我无法访问user.roles。