无法使用 rails 中的 active_admin 配置 cancancan
Unable to configure cancancan with active_admin in rails
我正在尝试制作一个博客网站。我正在使用 active_admin
和 cancancan
gem。我制作的两个控制器是Post
、Category
。
posts_controller.rb
class PostsController < InheritedResources::Base
load_and_authorize_resource
private
def post_params
params.require(:post).permit(:title, :body, :user_id, :published_at)
end
end
categories_controller.rb
class CategoriesController < InheritedResources::Base
load_and_authorize_resource
private
def category_params
params.require(:category).permit(:category)
end
end
user.rb
class User < ApplicationRecord
has_many :posts
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :validatable
def admin?
role == "admin"
end
def regular?
role == "regular"
end
def guest?
role == "guest"
end
end
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
#user = User.new()
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
schema.rb
ActiveRecord::Schema.define(version: 2019_02_18_221247) do
create_table "active_admin_comments", force: :cascade do |t|
t.string "namespace"
t.text "body"
t.string "resource_type"
t.integer "resource_id"
t.string "author_type"
t.integer "author_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id"
t.index ["namespace"], name: "index_active_admin_comments_on_namespace"
t.index ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id"
end
create_table "categories", force: :cascade do |t|
t.string "category"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "body"
t.integer "user_id"
t.date "published_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "category_id"
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.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "role", default: "guest"
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
我正在尝试根据 role
定义授权,用户 table 中有角色列,默认情况下新用户是来宾用户。
我的目标是让来宾用户只能阅读帖子。
问题:尽管我在 [=60= 中明确定义了不同类型的用户可以做什么,但我的管理员和来宾用户都被拒绝访问].
如果您需要有关代码的更多信息,可以在 github 上查看。
cancancan 不再支持 InheritedResources。看这里:https://github.com/CanCanCommunity/cancancan/wiki/Inherited-Resources
您需要使用适配器。 CanCanCan默认只支持ActiveRecord和ActionController
我正在尝试制作一个博客网站。我正在使用 active_admin
和 cancancan
gem。我制作的两个控制器是Post
、Category
。
posts_controller.rb
class PostsController < InheritedResources::Base
load_and_authorize_resource
private
def post_params
params.require(:post).permit(:title, :body, :user_id, :published_at)
end
end
categories_controller.rb
class CategoriesController < InheritedResources::Base
load_and_authorize_resource
private
def category_params
params.require(:category).permit(:category)
end
end
user.rb
class User < ApplicationRecord
has_many :posts
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :validatable
def admin?
role == "admin"
end
def regular?
role == "regular"
end
def guest?
role == "guest"
end
end
ability.rb
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
#user = User.new()
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
schema.rb
ActiveRecord::Schema.define(version: 2019_02_18_221247) do
create_table "active_admin_comments", force: :cascade do |t|
t.string "namespace"
t.text "body"
t.string "resource_type"
t.integer "resource_id"
t.string "author_type"
t.integer "author_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id"
t.index ["namespace"], name: "index_active_admin_comments_on_namespace"
t.index ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id"
end
create_table "categories", force: :cascade do |t|
t.string "category"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "body"
t.integer "user_id"
t.date "published_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "category_id"
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.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "role", default: "guest"
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
我正在尝试根据 role
定义授权,用户 table 中有角色列,默认情况下新用户是来宾用户。
我的目标是让来宾用户只能阅读帖子。
问题:尽管我在 [=60= 中明确定义了不同类型的用户可以做什么,但我的管理员和来宾用户都被拒绝访问].
如果您需要有关代码的更多信息,可以在 github 上查看。
cancancan 不再支持 InheritedResources。看这里:https://github.com/CanCanCommunity/cancancan/wiki/Inherited-Resources
您需要使用适配器。 CanCanCan默认只支持ActiveRecord和ActionController