2016-04-07 32 views
0

Basit bir QA forumu oluşturmaya çalışıyorum. Kimlik doğrulama için kullanıyorum ve izin için cancancan kullanmaya karar verdim.Neden bazı sayfalara erişmeme izin vermiyor?

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 

mesaj kontrolörü:

Ben o ben usernews erişmek için çalışıyorum ve etiketleri ile etiketlenen tüm yeni mesajları görmek için
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 

'da bir kullanıcı tarafından yaratılan ya da tanışılan tüm mesajları görünüz, bu hata sonucu hata mesajı alıyorsunuz, diyor ki bu hata

Bu sayfaya erişim yetkiniz yok yönetmek,: Kullanıcı rolü yönetici değildir ve o

olamazsa

Olur tüm

Bunu nasıl düzeltebilirim ve kullanıcılar için bu sayfalara erişimi vermek ve kullanmadan moderatörler: yönetmek.

Not: Ayrıca bana söyleyebilir misin, rails_admin kullanıyorum doğru mu?

RailsAdmin.config do |config| 
    config.authenticate_with do 
    warden.authenticate! scope: :user 
    end 
    config.current_user_method(&:current_user) 
    config.authorize_with :cancan 
end 
+0

. izin kontrol et. –

+0

@P_M Anlıyorum, ama neden? can: read, all Neden çalışmıyor? – malworm

cevap

0

bu deneyin: açıkça bu sayfaya erişmek için bir yetkili oluyor da o sayfaya erişim vermeyin söylemek değildir

class Ability 
    include CanCan::Ability 
    def initialize(user) 
     if user 
      can :access, :rails_admin 
      can :dashboard 
      if user.role == :admin 
       can :manage, :all 
      elsif 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 
       can :read, :all 
      elsif user.role == :moderator 
       can :read, :all 
       can [:create, :update, :destroy], [Post, Comment] 
      end 
     end 
    end 
end 
İlgili konular