【问题标题】:Export all user policies using Pundit gem使用 Pundit gem 导出所有用户策略
【发布时间】:2018-08-13 21:37:40
【问题描述】:

如何使用 Pundit Gem 检索所有用户策略和范围?我需要返回一个包含所有用户策略的 json 对象来检查前端 javascript 模板中的权限。

使用 CanCanCan gem,我可以做这样的事情:

class Ability
  include CanCan::Ability

  # ....

  def to_list
    rules.map do |rule|
      object = { actions: rule.actions, subject: rule.subjects.map{ |s| s.is_a?(Symbol) ? s : s.name } }
      object[:conditions] = rule.conditions unless rule.conditions.blank?
      object[:inverted] = true unless rule.base_behavior
      object
    end
  end
end

Pundit 也可以这样做吗?

【问题讨论】:

    标签: ruby-on-rails ruby cancan pundit cancancan


    【解决方案1】:

    我有同样的要求,我得到以下代码在每个调查中都可以工作:

    def index
        classes = [Admin, BusNumber, Ticket, :ticket_statistics]     
    
        permissions = { }                             
    
        classes.each do |clazz|                       
            policy =  Pundit.policy(current_admin, clazz)      
            policy.public_methods(false).sort.each do |m|      
                result = policy.send m                    
                permissions["#{clazz}.#{m}"] = result     
            end
        end 
    
        render json: permissions
    end  
    

    current_admin是获取当前登录用户的方法,代码给出如下结果

    {
        "Admin.create?": true,
        "Admin.disable?": true,
        "Admin.enable?": true,
        "Admin.index?": true,
        "Admin.show?": true,
        "Admin.update?": true,
        "BusNumber.create?": true,
        "BusNumber.destroy?": true,
        "BusNumber.index?": true,
        "BusNumber.update?": true,
        "Ticket.index?": true,
        "Ticket.refund_by_admin?": true,
        "Ticket.show?": true,
        "ticket_statistics.overall?": true
    }
    

    【讨论】:

    • 这项工作是否适用于 Foo::BarPolicy 等命名空间模型?
    • @reiallenramos 您可以为命名空间策略执行此操作:Pundit.policy(current_admin, [:foo, Bar]) # ==> Looks in Foo::BarPolicy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多