提高rails模型中授权检查的性能

时间:2011-10-18 16:01:11

标签: ruby-on-rails activerecord

我正在考虑在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 :(得分:0)

由于授权很少变更,并且您似乎有一个有限的会员资格列表,您可以:

  • 为每个角色的用户数据库添加列
  • 在角色模型上创建回调以计算用户的成员身份

这样,您只能在保存角色时计算一次会员资格。其他一切都是简单/快速的列查找。