确定当前设计用户的范围授权?

时间:2012-05-29 21:35:48

标签: ruby-on-rails ruby-on-rails-3 devise

My Rails 3.2项目有一个设计生成的用户和一组模型,这些模型都包含特定于该用户的数据。我希望登录用户只能通过控制器公开的API访问自己的数据。

现在,实现这一目标的一种蛮力方式是将每个控制器改为:

def index
  @stuff = Stuff.all

def index
  @stuff = Stuff.find_all_by_user_id current_user.id

我必须为每个控制器的每个动作重复此操作。是否有更简洁和干燥的方式来达到同样的效果?我必须写的样板量感觉不对。

谢谢!

2 个答案:

答案 0 :(得分:1)

看一下CanCan gem。

答案 1 :(得分:0)

a)你可以在application_controller.rb 中回调之前的看起来像

def find_stuff_from_current_user
  @stuff = Stuff.find_all_by_user_id current_user.id
end

而不是像这样在每个控制器中调用它:

before_filter :find_stuff_from_current_user

现在每个控制器和每个操作都有@stuff变量。

b)或者你可以在材料模型中使用范围.rb ,你可以这样说:

scope :stuff_from_current_user, where(:user => current_user)