嗨,我需要帮助新的(对我来说)宝石'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/photos
,localhost:3000/post/97/photos/new
和localhost:3000/post/97/photo/244/show
...
能力之类: 可以:破坏,照片,@ photo.post.user_id =>用户身份 //但是如何定义@photo ??或者如果你知道一种更简单的方法吗?
答案 0 :(得分:1)
您可以使用以下块:
can :manage , Post do | post |
post.user_id == user.id
end
这意味着只有当前用户创建了Post才能管理它。