0

我正在使用 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 这一行似乎从未受到打击。它总是显示所有用户交易,也包括其他用户的交易。

4

2 回答 2

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

如果您需要获取属于您正在获取的特定公司的用户交易,您可以使用 cancan 提供的 access_by 范围:

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

如果您现在还没有弄清楚,这应该会有所帮助,您可以在此处阅读有关此主题的 cancan 文档的更多信息:https ://github.com/ryanb/cancan/wiki/Fetching-Records

于 2013-05-22T21:43:52.067 回答
0

如果你有类似...

can :manage, UserTransaction

或者

can :manage, :all

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

您将能够阅读所有交易,因为“管理”比“阅读”更强

于 2013-05-19T17:30:09.357 回答