希望能够授权某些用户查看字段,而不仅仅是对整个对象进行限制
答案 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