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

时间:2015-05-13 02:39:57

标签: ruby-on-rails devise pundit

Rails_admin: Should I have admin_user or user with admin role to manage users and admin panel之后我想采用Pundit来实现其应用程序的策略优雅。该应用程序具有用户模型和管理员模型 - 一个用于客户,另一个用于员工。它也是多租户,但不应该对这个问题造成严重影响。

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

困难的部分是支持Pundit政策以支持两种不同的用户模式 ​​- 用户(客户)和管理员(员工)。

是否应该使用pundit_user方法将Admin或User设置为pundit_user(基于通过current_user和current_admin_user的可用性)或是否有其他方法。我没有找到关于这个用例的很好的文档(short line on github除外)。

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

1 个答案:

答案 0 :(得分:2)

在我的应用程序的可公开访问的部分中,使用了用户模型。默认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管理员中使用授权(所有管理员都拥有所有权限),但您应该可以使用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