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

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

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

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

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

谢谢!

好问题。 我在我的项目中使用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) 

要重定向到正确的配置文件,请将此方法添加到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在我的经验中也更灵活。

补充monkbroc答案:

对我来说,在RoR 4中,变量:admin和:current_admin从未工作过。 看到一些关于这个问题的页面,Warden没有注册这个角色,当时Devise不是一个模型,而是一个枚举…并找到了另一个这样的解决方案:

 config.authorize_with do |controller| unless current_user.try(:admin?) flash[:error] = "You are not an admin" redirect_to 'visitors#index' end end 

代码来自另一个答案: 使用Devise和Rails Admin对特定路由进行身份validation