2011-08-27 45 views
0

我有,看起来像在我的控制器下面的方法:我如何使用CanCan对此进行授权?

def some_request 
    user = User.find(params[:friend_user_id]) 
    req = user.requests.build(:from_id => current_user.id) 
    # do more stuff! 
end 

现在,这是一个为了讨论称为RandomController控制器。这是一个具有非RESTful方法的RESTful控制器,如下所示。我只使用authorize_resource并且没有加载资源。我想我可以通过在我的Ability类中执行以下操作来管理此项操作:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    if user 
     can :manage, Request do |req| 
     req.user_id == user.id 
     end 
    end 
    end 

这不是这么做的。如何修改some_request来授权创建请求?基本上我想要做到以下几点:允许任何经过身份验证的用户对仅属于他们的请求执行所有CRUD操作(:manage)。用户与has_many的关系如下:

has_many :requests 

想法?

回答

1

几件事情:

  1. 你打电话req.user.id,可能未加载用户资源(也许应该不会!)。将其更改为req.user_id,并保存自己的用户资源请求。
  2. CanCan要求您使用current_user对象,而不仅仅是user

瑞安贝茨在记录CanCan的功能和功能方面做得非常出色。有关更多详细信息,请参阅RailsCast #192 episode(或plain-text ASCII-cast version)和GitHub project

+0

第1点有意义。 2没有。在我的Ability类中,initialize方法看起来像这样:def initialize(user),而且本质上是current_user。这并没有真正回答原来的问题。 – randombits

+2

@randombits,克里斯看不到你的Ability类的其余部分,因此在可见的情况下,他的第二点确实是合理的。 – twe4ked

相关问题