【问题标题】:Rails_admin: Should I have admin_user or user with admin role to manage users and admin panelRails_admin:我应该有 admin_user 还是具有管理员角色的用户来管理用户和管理面板
【发布时间】:2014-11-24 10:34:40
【问题描述】:

在我的 Rails 应用程序网站中,访问者可以注册并创建内容。它使用带有用户模型的设计,一切正常。

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

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

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails devise cancan rails-admin pundit


    【解决方案1】:

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

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

    一个原因是我希望能够从 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
    

    为了防止退出当前用户时退出当前Admin,请在config/initializers/devise.rb中设置此配置

    config.sign_out_all_scopes = false
    

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

    【讨论】:

    • 嗨 @Monkbroc 很好奇您是如何使用多个用户类(例如:Admin 和 User)实现 Pundit 的
    • 当然@jufemaiz。你能发布一个关于具有多个模型的权威的问题,我会回答吗?
    • @jufemaiz 你有时间看看我对你问题的回答吗?
    【解决方案2】:

    补充monkbroc答案:

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

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

    代码来自另一个答案:Authenticate using Devise and Rails Admin for particular routes

    【讨论】:

      猜你喜欢
      • 2016-12-17
      • 2018-04-29
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      相关资源
      最近更新 更多