【问题标题】:How to render views based on user role on Rails 5.1如何在 Rails 5.1 上基于用户角色呈现视图
【发布时间】:2018-11-27 20:37:18
【问题描述】:

我目前正在开发具有两个不同用户角色的 Rails 5.1 应用程序:“管理员”和“客户”。 (我将角色存储在用户表上名为“role”#string 的列中)。

我正在寻找基于用户角色呈现不同视图的最有效方法。例如

  • 如果具有 user.role = "Customer" 的用户登录,我想呈现 客户#index

  • 如果具有 user.role = "Admin" 的用户登录,我想呈现 管理员#index

现在路由根是“admin#index”。有没有办法根据当前用户的角色改变根路由?

任何关于根据用户角色呈现不同视图的最有效方式的提示将不胜感激!非常感谢!

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    您可以为资源指定after_sign_in_path_for 路由。所以

    application_controller.rb

    ....
    
    def after_sign_in_path_for(resource)
      if resource.role == "Customer"
        customers_path (or whatever the name of the path is in your routes)
      elsif resource.role == "Admin"
        admins_path (same here, whatever the name of the path is in your routes)
      else
        super
      end
    end
    
    ....
    

    对于这个特定的https://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/Helpers:after_sign_in_path_for 或所有选项https://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/Helpers,您可能会发现很多类似的方法很有用。

    【讨论】:

    • 谢谢!现在我的路由根是 admin#index,有没有办法根据用户角色使其动态化?例如。 admin#index 用于管理员用户,customer#index 用于客户用户。还是我应该有不同的根路径?
    • 好吧,如果控制器是命名空间的,是的,那么您可以设置管理员根和客户根等,但如果不是,那么我认为您必须重定向。
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2011-05-02
    • 2022-06-14
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多