阅读pundit gem文档在哪里定义.admin?

时间:2016-01-05 01:05:47

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems pundit

我有一个版主关系表,通过将用户ID与表格中的组ID配对,将用户作为mod分配给组。

我只希望mods能够创建一个组。

我正在尝试使用pundit gem来执行此操作,但我仍然坚持使用文档。它有PostPolicy示例:

def update?
 user.admin?
end

之前在其他地方定义了管理方法吗?

如果这是为什么人们不直接在控制器更新方法中使用它? e.g。

def update
 if user.admin? 
   update
 else
   dont update
end

我正在构建一个应用程序来学习rails。需要帮助缠绕我的头。我不确定pundit gem是否自己定义了策略类中的admin方法,或者我是否必须创建该方法。如果我需要制作方法,为什么我需要专家宝石,当我可以使用管理方法时,就像我上面的例子一样?

1 个答案:

答案 0 :(得分:1)

我没有使用专家,但似乎我可以澄清你的问题。

  

之前在其他地方定义了管理方法吗?

很可能只有user属性:管理员为true,其他人为false

  

如果这是为什么人们不直接在控制器更新方法中使用它?

这是为了解除授权和内部动作逻辑,这是一个尊重单一责任原则的好方法。授权可能很复杂,有时您会希望重用您定义的规则。

def update
  if user.admin? 
    update
  else
    don't update
  end
end

首先,你将如何自己处理其他情况,你的逻辑会持续多久?现在想象一下,你需要在每个动作中重复这个else逻辑。此外,如果您有一个可以访问不同控制器中的10个操作的用户组,重复这些if条件和else逻辑的次数,该怎么办?

  

如果我需要制作方法,为什么我需要专家宝石,我可以像上面的例子那样使用管理方法?

没有人强迫你使用这个宝石,这样做可以让你的开发人员生活更轻松。如果您的应用程序相对较小,并且您不需要这样的过度杀伤,高级选项和帮助程序,您可以自由地编写它(例如,如果您只有admin / not管理员选项 - before_action一个简单的检查就足够了)。您要问的示例是gem使用的最简单情况。