Rails cancan宝石

时间:2012-09-21 11:53:36

标签: ruby-on-rails cancan

嗨,我需要帮助新的(对我来说)宝石'cancan'

我有下一个问题: 在我的应用程序中,我有'发布'模型和'照片'模型(路线:)

  resources :posts do
    resources :photos
  end

并在ability.rb中写道:

class Ability
  include CanCan::Ability

  def initialize(user)

    user ||= User.new

    if user.roles.first.nil?
        can :read, Post
    #not logged
    elsif user.roles.first.name == "user"
        #loged in as user
        can :read, Post
        can :create, Post
        can :update, Post, :user_id => user.id
        can :destroy, Post , :user_id => user.id 

    elsif user.roles.first.name == "admin"
        # login as admin
        can :manage, Post
    end

  end
end

我不知道如何把这个逻辑: 如果由其他用户创建帖子,则当前用户无权访问页面

localhost:3000/post/97/photos

他(当前用户)不能创造任何东西或破坏,换句话说他只能阅读localhost:3000/post/97/

但如果当前用户是autor - 他可以访问localhost:3000/post/97/photoslocalhost:3000/post/97/photos/newlocalhost:3000/post/97/photo/244/show ...

能力之类: 可以:破坏,照片,@ photo.post.user_id =>用户身份 //但是如何定义@photo ??或者如果你知道一种更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下块:

can :manage , Post  do | post |
  post.user_id == user.id
end

这意味着只有当前用户创建了Post才能管理它。