我觉得答案是“这是内置的,笨蛋”,但我找不到文件来证实我的怀疑。
我使用的是一个Rails应用程序,我的问题是:“我如何创建新的管理用户?”我问这个问题的原因是,遵循Devise似乎只是创建了一个可以公开/admins/sign的结构,类似于它为新用户公开/user/sign的方式。
现在,一般来说,我不希望任何人去/admins/登录仅仅是为了看看他们是否可以。但我真的不想指望这一点,并制造一个(相当大的漏洞)的弱点。因此,我的后续问题是:“我如何确保管理员注册,以便只有正确的人才能看到它?”和/或“有什么更好的选择来处理管理帐户的设计?”
编辑1
我发现了(在他们的医生里)确保管理员注册的明显答案。如果我删除管理模型中的:registerable
和其他几个配置选项,并使用适当的设置运行迁移,则该路由根本无法到达任何类型的管理注册。太棒了。
我想我现在的第一个问题仍然存在:“我现在如何创建一个新的管理员?”这并不是说现在任何人都可以注册成为管理员,但我也不知道我或其他人如何创建一个管理帐户。
发布于 2016-08-19 19:30:45
Devise是一个很好的身份验证宝石,但是它缺少一些关键特性,比如您只想让admin来创建用户。对于很多项目来说,这几乎是一般用途的要求。
对于这个问题,没有一个单一的解决方案。
这里有几件事情是可以设想的。
现在我们要改变上述三种行为
我假设您的用户模型是user
,并为user
配置devise
首先,您需要覆盖设计注册控制器。
## app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
before_action :authenticate_user!, :redirect_unless_admin, only: [:new, :create]
skip_before_action :require_no_authentication
private
def redirect_unless_admin
unless current_user.try(:admin?)
flash[:error] = "Only admins can do that"
redirect_to root_path
end
end
def sign_up(resource_name, resource)
true
end
end
# config/routes.rb
Rails.application.routes.draw do
devise_for :users, :controllers => { :registrations => 'registrations'}
end
以下是上述三个问题的处理方法。
before_action
确保用户登录,并重定向他们,除非他们是管理员,如果他们试图注册。require_no_authentication
方法引起的,跳过它解决了这个问题。sign_up
助手方法被重写以防止自动登录。https://stackoverflow.com/questions/39046036
复制相似问题