Повышение производительности проверок авторизации в модели рельсов - PullRequest
0 голосов
/ 18 октября 2011

Я смотрю на повышение производительности действия контроллера в нашем приложении Rails.Посмотрев на некоторые счетчики перфектов, я теперь знаю, что проблема заключается в том, как мы выполняем несколько проверок авторизации в коде нашей модели.Они выглядят примерно так:

Class Company < ActiveRecord::Base
def member?(user)
  #look up a table to check for membership if @is_member does not exist else return @is_member
end

def employee?(user)
  #look up a table to check for membership
end    

def manager?(user)
  #look up a table to check for membership
end
end 

class SomeModel < ActiveRecord::Base
def some_method
    do_something if current_company.employee?(current_user)
end
end

Поскольку существует множество мест, где мы выполняем проверку, аналогичную some_method, запросы обычно заканчиваются попаданием в базу данных много раз.Это похоже на расточительство.Как можно ускорить такие проверки авторизации?(Предполагая, что кэширование - это то, что нужно)

1 Ответ

0 голосов
/ 18 октября 2011

Поскольку полномочия меняются редко, и, по-видимому, у вас есть ограниченный список членств, которые необходимо учитывать, вы можете:

  • Добавить столбец в базу данных пользователей для каждой роли
  • создатьобратный вызов модели для подражания для расчета членства для пользователя

Таким образом, членство рассчитывается только один раз, когда роль сохраняется.Все остальное - простой / быстрый поиск столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...