继承Devise控制器调整管理员角色

时间:2017-11-13 15:39:30

标签: ruby-on-rails devise ruby-on-rails-5

我正在尝试自定义Devise模型(Admin)并对登录执行一些检查。然后我添加了一些需要在创建会话之前进行验证的字段。

已为Admin模型生成控制器和视图。

继承的会话控制器如下所示:

class Admins::SessionsController < Devise::SessionsController
  # before_action :configure_sign_in_params, only: [:create]

  # GET /resource/sign_in
  # def new
  #   super
  # end

  # POST /resource/sign_in
  # def create
  #   super
  # end

  # DELETE /resource/sign_out
  # def destroy
  #   super
  # end

  protected


  # If you have extra params to permit, append them to the sanitizer.
  # def configure_sign_in_params
  #   devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
  # end
end

其中一项验证是针对存储的值检查当前日志记录的管理IP地址(在管理员创建后手动填充专用字段)。

我有两个问题:

1 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 所有protected方法都将从父控制器继承。但是,您无法直接从private调用父{h} Admins::SessionsController方法。所有before_action都将正常执行,您不需要在继承的类中复制它们。

  2. 我同意明治先生的意见。你可能应该让你的IP检查before_action,以便它在父create方法向用户呈现页面之前发生。但是,在current_admin执行之前,您将无法使用super,因此您需要找到另一种识别管理员用户的方法,或者您应该完全修改create方法而不使用super

  3. 您也可以查看this question的解决方案。