基于 cancancan 行的过滤器
cancancan row based filter
我已经在 cancancan 中声明了一个角色技能 gem (rails 5, postgres, devise):
can [:update, :show, :destroy, :index], SalesDatum do |datum|
datum.try(:user_id) == user.id #the ids just access the id's from the user object that is passed into can can and from the table
end
SalesDatum
有一个 user_id
字段。
这适用于显示操作,因为我只能 show
已登录的 SalesDatum user_id
例如:
http://localhost:8080/projects/19/sales_data/961
正确获得身份验证,因为登录 user_id 与 sales_data
上的 user_id 匹配
http://localhost:8080/projects/19/sales_data/800
正确地没有得到验证,因为登录的 user_id 与 sales_data
上的 user_id 不匹配
但是,当我执行获取索引操作时:
http://localhost:8080/projects/19/sales_data
它显示了 @sales_data
变量的所有销售数据。因此,它会显示 data.id 800 和 961。
销售数据控制者:
load_and_authorize_resource
def index
@sales_data = SalesDatum.where(project_id:params[:project_id])
end
如何让索引操作只显示具有相关 user_id 的数据? cancan 不应该根据 user_id
过滤吗?
您需要使用哈希语法定义规则。
can [:update, :show, :destroy, :index], SalesDatum, user_id: user.id
您可能还想定义 edit
操作,因此:
can [:edit, :update, :show, :destroy, :index], SalesDatum, user_id: user.id
可以简化为:
can :manage, SalesDatum, user_id: user.id
如果 SalesDatum 定义了 belongs_to :user
,您还可以写:
can :manage, SalesDatum, user: user
我已经在 cancancan 中声明了一个角色技能 gem (rails 5, postgres, devise):
can [:update, :show, :destroy, :index], SalesDatum do |datum|
datum.try(:user_id) == user.id #the ids just access the id's from the user object that is passed into can can and from the table
end
SalesDatum
有一个 user_id
字段。
这适用于显示操作,因为我只能 show
已登录的 SalesDatum user_id
例如:
http://localhost:8080/projects/19/sales_data/961 正确获得身份验证,因为登录 user_id 与 sales_data
上的 user_id 匹配http://localhost:8080/projects/19/sales_data/800 正确地没有得到验证,因为登录的 user_id 与 sales_data
上的 user_id 不匹配但是,当我执行获取索引操作时:
http://localhost:8080/projects/19/sales_data
它显示了 @sales_data
变量的所有销售数据。因此,它会显示 data.id 800 和 961。
销售数据控制者:
load_and_authorize_resource
def index
@sales_data = SalesDatum.where(project_id:params[:project_id])
end
如何让索引操作只显示具有相关 user_id 的数据? cancan 不应该根据 user_id
过滤吗?
您需要使用哈希语法定义规则。
can [:update, :show, :destroy, :index], SalesDatum, user_id: user.id
您可能还想定义 edit
操作,因此:
can [:edit, :update, :show, :destroy, :index], SalesDatum, user_id: user.id
可以简化为:
can :manage, SalesDatum, user_id: user.id
如果 SalesDatum 定义了 belongs_to :user
,您还可以写:
can :manage, SalesDatum, user: user