0
私は簡単なQAフォーラムを作成しようとしています。私は認証のために工夫をし、承認のためにcancancanを使うことに決めました。なぜcancancanは私にいくつかのページにアクセスさせませんか?
Ability.rb:
class Ability
include CanCan::Ability
def initialize(user)
can :read, :all
if user && user.role?(:admin)
can :access, :rails_admin
can :dashboard
can :manage, :all
elsif user && user.role?(:user)
can :create, [Post, Comment]
can :update, Post, user_id: user.id
can :update, User, id: user.id
can [:update, :destroy], Comment, user_id: user.id
elsif user && user.role?(:moderator)
can [:create, :update, :destroy], [Post, Comment]
end
end
end
記事コントローラ:
class PostsController < ApplicationController
before_action :authenticate_user!, except: [:index, :show]
load_and_authorize_resource
def index
@posts = Post.all.order('created_at DESC')
end
def withtag
if params[:tag]
@posts = Post.tagged_with(params[:tag]).order('created_at DESC')
@tagname = params[:tag]
@tag = Tag.find_by_name(params[:tag])
end
end
def usernews
@posts = []
allPosts = Post.all.order('created_at DESC')
userTags = current_user.subscribed_tags.map(&:name)
allPosts.each do |post|
postTags = post.tag_list.split(',')
userTags.each do |tag|
if postTags.include?(tag)
@posts.push(post)
break
end
end
end
end
def userposts
@user = User.find(params[:id])
@posts = Post.where(user_id: @user.id).order('created_at DESC')
end
def new
@post = Post.new
end
def create
@post = current_user.posts.build(post_params)
@post.user_id = current_user.id
if @post.save
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update(post_params)
redirect_to @post
else
render 'edit'
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:title, :body, :image, :tag_list)
end
end
Iという私は、usernewsへのアクセスを取得するとタグでタグ付けされているすべての新しい投稿を参照しようとしています登録されているか、一部のユーザーによって作成されたすべての投稿を表示するとエラーが表示される
このページにアクセスする権限がありません
ユーザーの役割が管理者ではないと彼は
できない場合、それは起こります、管理:すべての
を、私はそれを修正し、ユーザーのために、このページへのアクセスを与えることができますどのようにしてモデレータを使用せずに:管理してください。
P .:私もrails_adminを使用していますか?
RailsAdmin.config do |config|
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
config.authorize_with :cancan
end
を明確にあなたがそう、そのページにアクセスする権限を与えていないことを言っています。あなたの許可を確認してください。 –
@ P_M私はそれを理解しますが、なぜですか? can:読む、すべて なぜ機能しないのですか – malworm