CanCan 2.0 + Paperclip expiring_url

时间:2012-10-22 03:45:44

标签: ruby-on-rails paperclip cancan

我使用Paperclip expiring_url设置了一些文件。那些工作正常。

我尝试使用CanCan 2.0仅允许使用以下代码的expiring_url签名成员

# /app/models/ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new  # guest user
    can :read, :movies
    cannot :read, :movies, :expiring_url

    if user.persisted?
      can :read, :movies, :expiring_url
    end

  end
end

我的MoviesController.rb load_and_authorize_resource仍有所有用户都可以下载电影。

expiring_url不是Movie的属性,我可以看到这就是为什么不起作用的原因。我不确定如何指定与此关联的paperclip expiring_url对象以使其工作。

知道怎么做吗?

2 个答案:

答案 0 :(得分:2)

根据this页面上的声明,Cancan显然要求条件成为实际的数据库列:

  

仅对这些条件使用数据库列非常重要

这不是回形针的限制,它可以扫描(我喜欢它,不要误会我的意思)。

答案 1 :(得分:0)

我使用CanCan 1.6.x,但在2.0 docs定义能力下,Ryan说

  

传入current_user,允许您根据用户属性定义权限。

所以如果你有一个current_user就不会像下面那样适合你吗?

if user
  can :read, :movies, :expiring_url
else
  can :read, :movies
end

您能否提供有关“expiring_url”的更多信息?我刚刚意识到上述内容可能对你不起作用,因为 expiring_url 听起来不像模特。