ruby-on-rails - Rails、主动管理、设计、路线

标签 ruby-on-rails ruby devise routes cancancan

我一直在使用 Rails、Active Addmin 和 cancancan。除了一件事之外,一切都工作正常。最近,我为我的管理员类型用户和客户端添加了单独的命名空间。

在此更改之前,我以这种方式将所有经过身份验证的用户重定向到同一个事件管理仪表板 (routes.rb):

  devise_scope :user do
    authenticated :user do  
        root :to => 'admin/dashboard#index', as: :authenticated_root
    end
    unauthenticated :user do
      root :to => 'pages#index', as: :unauthenticated_root
    end
  end

目前,我需要以某种方式添加额外的条件,以检查经过身份验证的用户是否具有角色 adminclient

我的想法是做这样的东西:

devise_scope :user do
    authenticated :user do 
      if current_user.role?(:Architect) || current_user.role?(:Admin) 
        root :to => 'admin/dashboard#index', as: :authenticated_root
      else 
        root :to => 'clients/dashboard#index', as: :authenticated_client
      end
    end
    unauthenticated :user do
      root :to => 'pages#index', as: :unauthenticated_root
    end
  end

但我收到错误:未定义的局部变量或方法“current_user” 有谁知道如何检查用户在 route 的角色?有没有更好的方法来做到这一点?

最佳答案

根目录是一个负责路由定义的配置文件,您无法访问配置文件中的任何 session 变量。

如果您想在登录后重定向用户,可以使用 Devise::SessionsController 中的 after_sign_in_path_for 方法

class SessionsController < Devise::SessionsController

    def after_sign_in_path_for(resource)
        if resource.role?(:Architect) || resource.role?(:Admin) 
            authenticated_root_url
        else
            authenticated_client_url
        end 
    end
end

在您的 route ,您需要指示自定义session_controller

devise_for :user, :controllers => {:sessions => "sessions"}

关于ruby-on-rails - Rails、主动管理、设计、路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36200220/

相关文章:

ruby-on-rails - 如果用户点击链接,会出现闪烁消息吗?

ruby-on-rails - 设置 public_file_server.headers 除了一些文件

ruby-on-rails - 使用 git 进行版本控制

ruby - 样式/条件分配 : Use the return of the conditional for variable assignment and comparison

mysql - Rails 4 设计名字,姓氏不进入数据库

ruby-on-rails - Rails 4 - 无需身份验证的 Json 渲染

ruby-on-rails - 为什么 "rails server -e production"使其成为 "No route matches "/”,并且样式表无法加载?

javascript - jquery-ui-rails 可拖放功能不起作用

ruby - 如何在命令行上获取 ruby​​ -e 的管道输入?

ruby - 如何检查一个字符串是否是用 Ruby 编码的 base 64?