如何使用Devise辅助方法,以便某些控制器操作仅限于某个用户?

时间:2017-07-16 07:23:08

标签: ruby-on-rails ruby devise

目前正在构建一个教育应用程序,我有一个管理模型和一个用户模型。

我只是希望管理员能够访问导致创建,编辑和删除请求的链接。

我目前正在使用<% if user_signed_in? %>只允许已登录的用户访问该链接,但由于我添加了管理员角色,因此我只希望管理员能够访问这些链接。

我没有对我的管理员或用户控制器做任何其他事情,只是生成了必要的模型和控制器。

ActiveRecord::Schema.define(version: 20170714091732) do

  create_table "admins", force: :cascade do |t|
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer "sign_in_count", default: 0, null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string "current_sign_in_ip"
    t.string "last_sign_in_ip"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["email"], name: "index_admins_on_email", unique: true
    t.index ["reset_password_token"], name: "index_admins_on_reset_password_token", unique: true
  end

  create_table "courses", force: :cascade do |t|
    t.string "title"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "lessons", force: :cascade do |t|
    t.string "title"
    t.text "content"
    t.integer "course_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "users", force: :cascade do |t|
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer "sign_in_count", default: 0, null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string "current_sign_in_ip"
    t.string "last_sign_in_ip"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

end

1 个答案:

答案 0 :(得分:1)

如果您正确设置了管理模型的设计,您应该能够在过滤器之前添加到您的控制器操作,如下所示:before_action: authenticate_admin! 您还应该可以访问其他帮助程序,例如admin_signed_in?