仅对工作人员和当前用户添加到序列化器

我正在开发一个插件,需要向用户序列化器添加内容。目前运行正常!:tada:

但我需要仅针对管理员和当前用户,将内容添加到用户序列化器中。

不过……退一步想,也许我实际上只需要在用户个人资料页面显示这些信息,所以或许我应该把它放到别的地方?

  add_to_serializer(:user, :manager_status) {
    # TODO: 仅对当前用户和管理员包含
    return object.manager_status
  }

我目前是在用户个人资料页面显示这个信息。我想知道如何创建一个只包含这些内容的独立个人资料页面。如果有相关示例链接就太好了。

你需要创建一个新的路由,并确保除了管理员和当前用户外,其他人无法访问。这可能比你目前序列化的方式要复杂得多。

我认为你可以这样做:

  add_to_serializer(:user, :manager_status) {
    return object.manager_status if object.admin || object.staff
  }

凭记忆,你可能需要做一些操作来获取当前用户对象并进行匹配检查。

是的。我无法弄清楚如何获取当前用户。我认为你提供的方法会在用户(但不是当前用户)是管理员时将其添加进去。

你可以尝试像这样添加一个序列化器调用:

我尚未对此进行测试,因此你需要确保其安全性符合你的需求。

@pfaffman 你找到这个问题的解决方案了吗?

谢谢!

我不太记得了,但我想上面的方法应该可行。

这似乎就是我一直在找的机器人 :slight_smile:

  add_to_serializer(:post, :user_xxx, false) {
    # 如果对象用户存在且当前作用域是管理员,则获取用户自定义字段中的 'xxx'
    # object.user.custom_fields['xxx'] if object.user && scope.is_admin?
    # 如果对象用户存在且当前作用域是版主,则获取用户自定义字段中的 'xxx'
    # object.user.custom_fields['xxx'] if object.user && scope.is_moderator?

    # 工作人员权限将允许管理员和版主访问
    object.user.custom_fields['xxx'] if object.user && scope.is_staff?
  }