我如何使用CanCan授权?

时间:2011-08-27 23:34:10

标签: ruby-on-rails 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控制器,具有nonRESTful方法,如下所示。我只使用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 个答案:

答案 0 :(得分:1)

一些事情:

  1. 你正在调用req.user.id,这可能没有加载用户资源(也可能不应该!)。将其更改为req.user_id并自行保存用户资源的请求。
  2. CanCan要求您使用current_user对象,而不仅仅是user
  3. Ryan Bates在记录CanCan的功能和功能方面做得非常出色。有关更多详细信息,请查看RailsCast #192 episode(或plain-text ASCII-cast version)和GitHub project