在我的Rails应用程序网站中,访问者可以注册并创建内容。它与用户模型一起使用了devise,并且一切正常。

现在,我想使用rails_admin来管理网站资源和用户等,并且只有具有行政管理权限的人才能访问它。

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

如果我仅使用一个模型,那么如果用户是admin,我希望在登录后将用户重定向到管理面板,如果不是,则希望将用户重定向到其配置文件。哪个授权库可以或可以
在我的情况下更合适。

谢谢!

最佳答案

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

我更喜欢将管理员模型与用户模型分开。

原因之一是,我希望能够从Rails 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)

要重定向到正确的配置文件,请将此方法添加到您的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

为了防止从当前用户注销时从当前管理员注销,请在config/initializers/devise.rb中设置此配置
config.sign_out_all_scopes = false

为了解决您的其他问题,我同时使用了CanCan和Pundit。我更喜欢Pundit,因为使用CanCan可以评估每个请求的所有权限。使用Pundit,仅在需要时才检查权限。根据我的经验,Pundit也更加灵活。

关于ruby-on-rails - Rails_admin : Should I have admin_user or user with admin role to manage users and admin panel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27102718/

10-10 13:48