0
我不太明白如何限制在CanCan的特定情況下訪問鏈接。我總是會顯示「編輯」鏈接。 所以我相信問題是在我cancan方法(load_和authorize_)的不正確的定義。 我有CommentsController這樣的:CanCan多態資源訪問問題
class CommentsController < ApplicationController
before_filter :authenticate_user!
load_resource :instance_name => :commentable
authorize_resource :article
def index
@commentable = find_commentable #loading our generic object
end
......
private
def find_commentable
params.each { |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.includes(:comments => :karma).find(value)
end }
end
end
和我在從其他控制器渲染文件代碼有註釋/ index.html.erb:
<%= render :file => "#{get_commentable_partial_name(@commentable)}/show.html.erb", :collection => @commentable %>
你可以考慮一下「#{get_commentable_partial_name( @commentable)}「在這種情況下就像」文章「一樣。 內容 「的文章/ show.html.erb」 的:
<% if can? :update, @commentable %>
<%= link_to 'Edit', edit_article_path(@commentable) %> |
<% end %>
我ability.rb:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role? :admin
can :manage, :all
elsif user.role? :author
can :read, [Article, Comment, Profile]
can :update, Article, :user_id => user.id
end
end
end
我曾嘗試調試這個問題就像
user = User.first
article = Article.first
ability = Ability.new(user)
ability.can?(:update, article)
,我總是在能力檢查中得到「=> true」
注意:user.role == author和article.user_id!= user.id
,如果您需要了解更多信息,請寫
感謝的您的時間& &對不起,我的英語