pfaffman
(Jay Pfaffman)
1
我正在开发一个插件,需要向用户序列化器添加内容。目前运行正常!
但我需要仅针对管理员和当前用户,将内容添加到用户序列化器中。
不过……退一步想,也许我实际上只需要在用户个人资料页面显示这些信息,所以或许我应该把它放到别的地方?
add_to_serializer(:user, :manager_status) {
# TODO: 仅对当前用户和管理员包含
return object.manager_status
}
我目前是在用户个人资料页面显示这个信息。我想知道如何创建一个只包含这些内容的独立个人资料页面。如果有相关示例链接就太好了。
justin
(Justin DiRose)
2
你需要创建一个新的路由,并确保除了管理员和当前用户外,其他人无法访问。这可能比你目前序列化的方式要复杂得多。
我认为你可以这样做:
add_to_serializer(:user, :manager_status) {
return object.manager_status if object.admin || object.staff
}
凭记忆,你可能需要做一些操作来获取当前用户对象并进行匹配检查。
pfaffman
(Jay Pfaffman)
3
是的。我无法弄清楚如何获取当前用户。我认为你提供的方法会在用户(但不是当前用户)是管理员时将其添加进去。
justin
(Justin DiRose)
4
你可以尝试像这样添加一个序列化器调用:
我尚未对此进行测试,因此你需要确保其安全性符合你的需求。
paresy
(Michael)
5
@pfaffman 你找到这个问题的解决方案了吗?
谢谢!
paresy
(Michael)
7
这似乎就是我一直在找的机器人 
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?
}