查看时如何授权个人属性

时间:2019-07-09 21:58:53

标签: ruby-on-rails pundit

希望能够授权某些用户查看字段,而不仅仅是对整个对象进行限制

1 个答案:

答案 0 :(得分:1)

作为文档的一部分,试图为您提供帮助:

  

使用Pundit,您可以控制用户可以通过您的策略更新哪些属性。您可以像下面这样在策略中设置allowed_attributes方法:

# app/policies/post_policy.rb
 class PostPolicy < ApplicationPolicy
     def permitted_attributes
         if user.admin? || user.owner_of?(post)
             [:title, :body, :tag_list]
         else
             [:tag_list]
         end
    end
end

还有一个助手,可以控制每个操作的权限

permitted_attributes(record, action = action_name)可以代替。

或者,大多数情况下,您想使用定义访问某些属性的作用域。

从有关范围的文档中:

  

通常,您将需要某种视图列表记录,特定用户可以访问该记录。使用Pundit时,应定义一个称为策略作用域的类。它可能看起来像这样:

class PostPolicy < ApplicationPolicy
  class Scope
    attr_reader :user, :scope

    def initialize(user, scope)
      @user  = user
      @scope = scope
    end

    def resolve
      if user.admin?
        scope.all
      else
        scope.where(published: true)
      end
    end
  end

  def update?
    user.admin? or not record.published?
  end
end