0

A bit new to Pundit. I have 3 models and a joiner table; a User, Customer and Route model, and a joiner table that allows users to have a route. Customers belongs to specific routes.

I just want authorize a user to see a customer if she/he has a route in the routes_users joiner table.

I found myself a lot of ways to do that. But, what the best way to achieve it?

customer_policy.rb

def show?
  if user.admin? || user.sales_manager?
    true
  else
    user.routes.map(&:id).include? record.route_id
  end
end
pzin
  • 4,200
  • 2
  • 28
  • 49

1 Answers1

1

Using .map is not a good idea as it will populate all routes from DB in order to search through them locally, the best is to use .where and not .map as below:

def show?
  if user.admin? || user.sales_manager?
    true
  else
    user.routes.where(record.route_id).count > 0
  end
end
Shiko
  • 2,448
  • 1
  • 24
  • 31