管理员在设计下创建用户

时间:2016-02-25 10:14:38

标签: ruby-on-rails devise

Rials 4.2应用程序与设计3.5,其中用户创建仅限于两种类型的用户(由布尔值标识)。 Pundit用于授权,但不调用User类。

路线定义

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#menu" class="menu_link">Inhalt</a>
<nav id="menu">
  <ul>
    <li><a href="#">Punkt 1</a></li>
    <li><a href="#">Punkt 2</a></li>
    <li><a href="#">Punkt 3</a></li>
    <li><a href="#">Punkt 4</a></li>
  </ul>
</nav>

registrations_controller设置私有方法来定义devise_for :users, :controllers => { registrations: 'registrations' } resources :users do collection do get :index_context end end sign_up_params =&gt; account_update_params

Applications_controller从令牌

进行身份验证
params.require(:user).permit(   ...

鉴于上下文,尝试通过使用sessions_controller

来覆盖设计
def authenticate_user_from_token!
  user_email = request.headers["X-API-EMAIL"].presence
  user_auth_token = request.headers["X-API-TOKEN"].presence
  user = user_email && User.find_by_email(user_email)

  if user && Devise.secure_compare(user.authentication_token, user_auth_token)
    sign_in(user, store: false)
  end
end

但是当启用了创建用户的用户提交记录

class SessionsController < Devise::SessionsController
    skip_before_filter :authenticate_user!, :only => [:create, :new]
    skip_authorization_check only: [:create, :failure, :show_current_user, :options, :new]

就像用户转到地址Started POST "/users" for [...] Filter chain halted as :require_no_authentication rendered or redirected

一样

因此,不管怎样,请求都是由Devise的处理捕获的,尽管会话控制器在过滤之前。怎么能克服这个?

1 个答案:

答案 0 :(得分:1)

在仔细阅读覆盖RegistersController等各种选项后,只需创建一个单独的操作,并使用相关授权,如Pundit,

  def admin_new
    @local_user = User.new
  end

  def admin_create
    @local_user = User.new(user_params)
    @local_user.save
    respond_with(@local_user)
  end

表格状态:

<%= form_for(@local_user, :url => admin_create_users_path) do |f| %>

通过绕过设计并允许管理员(或任何其他角色)创建用户。