我有一个版主关系表,通过将用户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方法,或者我是否必须创建该方法。如果我需要制作方法,为什么我需要专家宝石,当我可以使用管理方法时,就像我上面的例子一样?
答案 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使用的最简单情况。