2016-05-25 17 views
3

私は2つのコントローラ、1つはユーザー用、1は管理者用です。gem Punditで名前空間を使用する方法

コントローラ/ articles_controller.rb

class ArticlesController < ActionController::Base 
    ... 
    def show 
    @article = Article.find(parmas[:id]) 
    authorize @article 
    end 
    ... 
end 

コントローラ/管理/ articles_controller.rb

class Admin::ArticlesController < AdminController 
    ... 
    def show 
    @article = Article.find(parmas[:id]) 
    authorize @article 
    end 
    ... 
end 

と私は2ファイルポリシー ポリシー/ article_policy.rb

class ArticlePolicy 
    extend ActiveSupport::Autoload 
    autoload :Admin 

    attr_reader :user, :record 

    def initialize(user, record) 
    @user = user 
    @record = record 
    end 

    def show? 
    # allow show for every user. 
    true 
    end 
end 

を持っており、 1つのファイルpolicies/admin/article_policy.rb

class Admin::ArticlePolicy 

    attr_reader :user, :record 

    def initialize(user, record) 
    @user = user 
    @record = record 
    end 

    def show? 
    # only show if use have role manager 
    user.manager? 
    end 
end 

ですが、私はアカウントユーザーを使用して/ admin/articles/1 /に記事を表示します。正常に表示されます。「アクセスが拒否されましたか」。この問題を解決する方法

? (私は宝石専門家1.10を使用します)。

答えて

8

authorizeメソッドを使用して、名前空間をパラメータとして渡します。

class ArticlesController < ActionController::Base 
    ... 
    def show 
    @article = Article.find(parmas[:id]) 
    authorize [:admin, @article] 
    end 
    ... 
end 
関連する問題