【问题标题】:Only the first user/admin should create users with Devise只有第一个用户/管理员应该使用 Devise 创建用户
【发布时间】:2018-06-14 12:22:16
【问题描述】:

我正在寻找一种不涉及额外库/模块的解决方案,只涉及设计。如何让管理员成为唯一可以创建新用户的人?

我有我的模型用户,由设计创建,并且我包含了默认值设置为 false 的 Admin (boolean) 列。之后,我用这个命令生成了设计控制器:

rails generate devise:controllers Users

但现在我真的不知道该怎么办......

我已经找到了一些非常相似的 stackoverflow 问题,但没有一个回答我的问题。我试图在不生成新控制器的情况下完成此操作,仅使用上面命令生成的子类。希望你能帮助我。

谢谢!

更新:

我想做与stackoverflow question 的最后一个答案类似的事情,但我不能让它发挥作用:/

【问题讨论】:

  • 您需要创建视图并确保只有管理员才能使用gem 'pundit'gem 'cancancan' 之类的方式访问这些页面。尝试一下并更新您的问题

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


【解决方案1】:

您可能应该在 routes.rb 中创建您的自定义控制器:

devise_for :users, :controllers => {:registrations => "registrations"}

https://github.com/plataformatec/devise/wiki/Tool:-Generate-and-customize-controllers Override devise registrations controller

然后您应该运行迁移以将管理字段添加到您的用户表:

def change
  add_column :users, :admin, :boolean, default: false
end

最后在你的控制器逻辑中,只允许管理员创建用户,例如:

if user.admin == false
  flash[:alert] = "You are not allowed to create a user"
  redirect_to whatever_path
end

我认为这应该可以完成这项工作。

【讨论】:

  • 感谢您的回答。我想要的是这篇文章的最后一个答案:stackoverflow.com/questions/24875403/… - 但我不能让它正常工作,也许你可以稍微调整一下,不知道..
  • 不客气,这篇文章的最后一个答案对我来说看起来很优雅,不知道为什么它在你的情况下不起作用,不幸的是现在没有时间测试/调整它。但还要注意,您可以限制非管理员(且未登录)的任何人访问用户创建页面,在控制器中使用与此视图相关的类似逻辑,例如“除非 user.admin”闪烁消息“不允许”并重定向。那将是第一步。其余的,我认为我的解决方案会起作用,但另一个看起来不错,希望你设法让其中任何一个对你有用。
  • 再次感谢您。我最终使用了另一个答案,问题是我需要创建一个自定义控制器。最好的问候;)
  • 很高兴听到你成功了!干杯:)
【解决方案2】:

我最终用这个问题的最后一个答案(Nuclearmans)解决了我的问题:Only allow admin user to create new users in Rails with Devise (No external modules)

顺便说一句,我必须创建一个自定义控制器 (registration)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2011-02-12
    • 2020-02-26
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多