Rails_admin:我应该有admin_user或具有admin角色的用户来管理用户和管理面板

Sta*_*ars 6 ruby-on-rails devise cancan rails-admin pundit

在我的rails应用程序网站中,访问者可以注册并创建内容.它使用设计用户模型,一切运作良好.

现在我想使用rails_admin来管理网站资源和用户等,只有拥有管理上限的人才能访问它.

我应该为管理面板访问创建单独的AdminUser模型,还是使用admin角色的用户模型,并使用一些授权库来管理访问.

如果我只使用一个模型,那么我希望用户在登录后重定向到管理面板,如果用户是管理员,如果不是,那么我希望用户被重定向到他们的个人资料.哪个授权库cancan或专家将更适合我的情况.

谢谢!

mon*_*roc 5

好问题.我在项目中使用Rails Admin和Pundit.

我更喜欢将Admin模型与User模型分开.

一个原因是我希望能够从Rails管理员"成为用户",以便在遇到问题时能够帮助他们.当您拥有单独的User和Admin模型时,它更容易实现.

Admin模型可以非常简单.用它生成它 rails generate devise Admin

然后在你的config/initializers/rails_admin.rb添加

config.authenticate_with do
  warden.authenticate! :scope => :admin
end

config.current_user_method(&:current_admin)
Run Code Online (Sandbox Code Playgroud)

要重定向到正确的配置文件,请将此方法添加到ApplicationController

def after_sign_in_path_for(resource)
  if resource.class == Administrator
    rails_admin_path
  else
    # Change profile_path to where you want regular users to go
    stored_location_for(resource) || profile_path
  end
end
Run Code Online (Sandbox Code Playgroud)

为了防止从当前用户退出时退出当前管理员,请在此处设置此配置 config/initializers/devise.rb

config.sign_out_all_scopes = false
Run Code Online (Sandbox Code Playgroud)

为了解决您的其他问题,我使用了CanCan和Pundit.我更喜欢Pundit,因为使用CanCan可以为每个请求评估所有权限.使用Pundit,只在需要时才会检查权限.Pundit在我的经历中也更灵活.