0

嗨,我需要新的(对我而言)gem '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/

但是,如果当前用户是 auto - 他可以访问localhost:3000/post/97/photos,localhost:3000/post/97/photos/new并且localhost:3000/post/97/photo/244/show...

有类似的能力:can :destroy, Photo , @photo.post.user_id => user.id // 但是如何定义@photo ?? 或者如果你知道更简单的方法?

4

1 回答 1

1

您可以使用如下块:

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

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

于 2012-09-21T13:43:59.797 回答