Filter index for CanCan

混江龙づ霸主 提交于 2019-12-11 04:37:04

问题


I am trying to filter the index according to the ability. I am using the wice_grid gem to make a table in the index, and to add a condition to tickets, we could use something called :conditions.

I have tried to put it like that:

@tickets_grid = initialize_grid(Ticket,
                                :include => [:user, :employee_department, :state],
                                :conditions => [Ticket.accessible_by(current_ability)])

This is not working, though. I'm looking for any suggestions.

Update: :conditions is working like ActiveRecord so I guess I need a query to look up through roles and detect the current ability


回答1:


What you are looking for is current_ability.model_adapter(Ticket, :index).conditions where Ticket is your model and :index is your access type.

so in your case it should be:

@tickets_grid = initialize_grid(Ticket,:include => [:user, :employee_department, :state],:conditions => current_ability.model_adapter(Ticket, :index).conditions)

https://github.com/ryanb/cancan/wiki/Fetching-Records




回答2:


From the section of the documentation you linked to:

Alternatively, instead of a Class object as the first parameter, you can use ActiveRecord::Relation:

@tasks_grid = initialize_grid(Task.where(:archived => false, :projects => {:active => true}).joins(:project) )

Ticket.accessible_by(current_ability) is a relation, not a hash of conditions, so you would do initialize_grid(Ticket.accessible_by(current_ability)). But you should already have @tickets initialized by CanCan, so you just need to initialize_grid(@tickets).



来源:https://stackoverflow.com/questions/18858352/filter-index-for-cancan

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!