首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pundit gem导出所有用户策略

使用Pundit gem导出所有用户策略
EN

Stack Overflow用户
提问于 2018-08-14 05:37:40
回答 1查看 442关注 0票数 2

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

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

代码语言:javascript
复制
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做同样的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-12 17:51:04

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

代码语言:javascript
复制
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是获取当前登录用户的方法,代码给出了以下结果

代码语言:javascript
复制
{
    "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
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51830937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档