Cancan显示所有交易而不是仅授权

时间:2013-05-19 11:24:58

标签: ruby-on-rails cancan

我正在使用cancan,我在UserTransactionsController中有这个

class UserTransactionsController < ApplicationController

load_and_authorize_resource

def index
  @company = Company.find(params[:company_id]
  @user_transactions = @company.user_transactions.order("date DESC").all
...

在ability.rb中我有:

can [:read], UserTransaction do |ut|
  ut.company_user.user.id == user.id
end

ut.company_user.user.id == user.id这行似乎永远不会被击中。它始终显示所有用户事务,也显示其他用户事务。

2 个答案:

答案 0 :(得分:1)

@rept,当你使用load_and_authorize_resource方法时,你不需要创建@user_transactions变量,这就是该方法基于ability.rb文件所做的事情。

您正在重写load_and_authorize_resource使用以下行创建的@user_transactions:

@user_transactions = @company.user_transactions.order("date DESC").all

如果您需要获取属于您正在获取的特定公司的用户事务,您可以使用cancanby提供的accessible_by范围:

@user_transactions = @company.user_transactions.accessible_by(current_ability).order("date DESC").all

这应该有帮助,如果你现在还没弄明白,你可以在这里阅读更多关于这个主题的康康文档:https://github.com/ryanb/cancan/wiki/Fetching-Records

答案 1 :(得分:0)

如果您有类似......

can :manage, UserTransaction

can :manage, :all

can [:read], UserTransaction {|ut| ut.company_user.user.id == user.id}

您将能够阅读所有交易,因为“manage”比“read”

更强