Pundit 与 Rails 加上用户、管理员和角色模型
Pundit with Rails plus User, Admin and Roles Models
继 Rails_admin: Should I have admin_user or user with admin role to manage users and admin panel I'm wanting to adopt Pundit 之后,因为它对应用程序的策略优雅。该应用程序同时具有用户模型和管理模型 - 一个用于客户,另一个用于员工。它也是多租户的,尽管这不会对问题产生太大影响。
我还想要一个单独的角色模型,允许客户根据需要混合搭配他们自己的 "title" 角色。这在实施中应该不会非常困难。
困难的部分是支持 Pundit 策略以支持两种不同的用户模型 - 用户(客户)和管理员(员工)。
我是否应该使用 pundit_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
在我的应用程序的可公开访问部分,使用了用户模型。自 pundit_user
returns current_user
.
以来默认的 Pundit 配置有效
在我的应用程序的管理部分,使用了管理员模型。原因之一是管理员可以在模拟用户时保持登录状态(查看他们在个人资料中看到的内容并帮助解决问题)。
在管理员控制器中 pundit_user
returns current_administrator
.
在RailsAdmin中,当前用户设置为当前管理员:
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 管理中定义为
def _current_user
instance_eval(&RailsAdmin::Config.current_user_method)
end
继 Rails_admin: Should I have admin_user or user with admin role to manage users and admin panel I'm wanting to adopt Pundit 之后,因为它对应用程序的策略优雅。该应用程序同时具有用户模型和管理模型 - 一个用于客户,另一个用于员工。它也是多租户的,尽管这不会对问题产生太大影响。
我还想要一个单独的角色模型,允许客户根据需要混合搭配他们自己的 "title" 角色。这在实施中应该不会非常困难。
困难的部分是支持 Pundit 策略以支持两种不同的用户模型 - 用户(客户)和管理员(员工)。
我是否应该使用 pundit_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
在我的应用程序的可公开访问部分,使用了用户模型。自 pundit_user
returns current_user
.
在我的应用程序的管理部分,使用了管理员模型。原因之一是管理员可以在模拟用户时保持登录状态(查看他们在个人资料中看到的内容并帮助解决问题)。
在管理员控制器中 pundit_user
returns current_administrator
.
在RailsAdmin中,当前用户设置为当前管理员:
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 管理中定义为
def _current_user
instance_eval(&RailsAdmin::Config.current_user_method)
end