1

我想阻止非管理员注册,以便只有超级用户/管理员可以添加新用户。我怎样才能做到这一点?

我尝试遵循此处提到的方法:在过滤器之前设计,除非用户已登录但没有结果,否则阻止访问“new_user_registration_path” 。

我已经安装了 devise、cancan 和 rolify。另外,我也不希望任何人去/users/sign_up页面和登录。只有管理员必须有能力注册新用户。

由于设备安装,没有用户控制器。如果需要,请指导我制作一个。

routes.rb

FifthApp::Application.routes.draw do
  devise_for :users
  resources :qanotes
end

user.rb

class User < ActiveRecord::Base

  #resourcify :resources
  rolify

  has_many :qanotes

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

end

当我尝试进入注册页面时(仅在登录后),我不断被重定向到根目录,即 localhost:3000。

4

2 回答 2

1

从用户模型的默认设计模块中删除 :regesterable 关键字。比您应该添加自己的表单来创建新用户,因此您可以添加新用户。希望它会有所帮助。谢谢

于 2013-07-23T14:30:02.190 回答
1

您可以自定义注册控制器(例如registrations_controller.rb),并且您应该添加before_filter身份验证并且before_filter只有管理员registrations_controller.rb看起来像:

class RegistrationsController < Devise::RegistrationsController
 before_filter :authenticate_user!
 before_filter :is_administratior?, only: [:new, :create]

 def new
   super
 end

 def create
   super
 end

 private

  def is_administratior?
  if user_signed_in? # if user signed
   if current_user.administrator? # if adminstrator return true
     true
   else
     redirect_to some_path
   end
  else
    redirect_to login_path
  end
end

在这里查看我关于 Devise/cancan 重定向管理员的回答

于 2013-07-23T17:44:50.723 回答