0

我正在尝试迁移到 Pundit,但遇到了一些麻烦。

我有一个用户模型和一个照片模型。

用户有很多照片,照片是用户的嵌套资源。在我的控制器中,我做

@user = User.find(params[:user_id])
@photos = @user.photos

在我的康康舞能力课上,我有

can :create, Photo, :user => { :id => user.id }

在一个视图中我会使用

<% if can? :create, @user => Photo %>

有人知道如何使用 Pundit 正确执行此操作吗?

先感谢您

4

1 回答 1

0

Pundit 通过提供对象授权来实现与 CanCan 不同的授权。对于初学者,您需要编写一个 PhotoPolicy:

class PhotoPolicy
  attr_reader :user, :photo

  def create?
    photo.user.id == user.id # Use photo.user_id if you have that column available 
  end    
end

然后在您看来,您可以执行以下操作:

<% if policy(@photo).create? %>

请注意,我在单个Photo. 如果你想要一个策略来获取用户有权访问的所有照片,你会想要使用一个范围。如果是这种情况,请告诉我,我会更新我的答案。

于 2014-08-21T18:47:46.873 回答