Pails与Rails以及用户,管理员和角色模型

继Rails_admin之后:我应该有admin_user或具有admin角色的用户来管理用户和管理面板我想要采用Pundit来实现其应用程序的策略优雅。 该应用程序具有用户模型和管理员模型 – 一个用于客户,另一个用于员工。 它也是多租户,但不应该对这个问题造成严重影响。

我还希望有一个单独的角色模型,允许客户根据需要混合和匹配他们自己的“标题”。 这在实施中也不应该非常困难。

困难的部分是支持Pundit策略以支持两种不同的用户模型 – 用户(客户)和管理员(员工)。

是否应该使用pundit_user方法将Admin或User设置为pundit_user(基于通过current_user和current_admin_user的可用性),或者是否有另一种方法。 我没有找到关于这个用例的很好的文档(除了github上的短线 )。

def pundit_user if !current_admin_user.nil? current_admin_user elsif !current_user.nil? current_user else nil end end 

在我的应用程序的可公开访问的部分中,使用User模型。 默认的Pundit配置有效,因为pundit_user返回current_user

在我的应用程序的管理部分中,使用了管理员模型。 其中一个原因是管理员可以在模拟用户时保持登录状态(查看他们在个人资料中看到的内容并帮助排除故障)。

在管理员控制器中, pundit_user返回current_administrator

在Rails Admin中,当前用户设置为当前管理员:

 config.authenticate_with do warden.authenticate! :scope => :administrator end config.current_user_method(&:current_administrator) 

虽然我没有在Rails Admin中使用授权(所有管理员都拥有所有权限),但您应该能够使用rails_admin_pundit gem,因为它确实如此

@controller.class.send(:alias_method, :pundit_user, :_current_user)

在Rails Admin中定义为

 def _current_user instance_eval(&RailsAdmin::Config.current_user_method) end