为Devise添加新范围

时间:2017-09-18 02:34:18

标签: ruby-on-rails ruby devise

我的目标是创建一个只能由具有特定role的用户访问的范围,在本例中为“编辑器”。或者更确切地说是管理员和编辑。

我正在使用设计。这是我尝试的一部分:

scope "/editor" do
  devise_for :editors

  # ...other routes
end

通过“rails server”运行时:

/home/user123/.gem/ruby/2.4.1/gems/activesupport-5.1.3/lib/active_support/inflector/methods.rb:269:in `const_get': uninitialized constant Editor (NameError)

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为你误解了scope论证的使用。如果要限制某个视图中的访问权限,可以执行以下操作。假设您有一个视频流服务,常规用户只能访问索引并显示操作/视图,但管理员可以查看其余内容(new edit等...)。

您在app/controllers/concerns/提出疑虑(google DRY)并将其命名为admin.rb

module IsAdmin
  extend ActiveSupport::Concern  

  def admin?
    return redirect_to videos_new, alert: "Access Denied" unless current_user.admin?
  end
end

现在在您的videos_controller.rb中包含我们刚刚提出的问题,并告诉控制器您要使用管理员的视图?方法

Class VideosController < Applicationcontroller
  include IsAdmin
  before_action :admin?, only: [:new, :edit]
end