我需要仅为当前经过身份验证的用户输出auth_token属性。
我的用户控制器已
class Api::V1::UsersController < ApplicationController
before_action :authenticate_with_token!, only: [:show, :create, :update, :destroy]
respond_to :json
def show
authorize User
respond_with User.find(params[:id])
end
...
序列化器:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email, :created_at, :updated_at, :auth_token
has_one :role
http请求类似于: 获取http://api.domain.com/users/1 使用标题:接受,内容类型和授权 (授权是auth_token)。
返回的是:
{
"user": {
"id": 1,
"email": "user1@domain.com",
"created_at": "2015-12-01T07:36:55.276Z",
"updated_at": "2015-12-01T07:36:55.276Z",
"auth_token": "8xxoZjZyx313cx2poabz",
"role": {
"id": 1,
"name": "admin",
"created_at": "2015-12-01T07:36:55.190Z",
"updated_at": "2015-12-01T07:36:55.190Z"
}
}
}
我只希望auth_token
显示它所属的用户请求它或具有super
角色的用户请求它。我的用户模型中有一个方法可以检查has_role? :super
。
在序列化器中,我尝试了这一点,但实际上只是在黑暗中拍摄。我不知道如何做到这一点:
...
def filter(keys)
if scope.auth_token == :auth_token
keys
else
keys - [:auth_token]
end
end
使用active_model_serializer版本0.9.3
答案 0 :(得分:0)
在源中看到this,点击了我的脑袋。
将上面的filter
方法更改为以下内容可以获得所需的结果。
def filter(keys)
if (scope == object) or scope.has_role?(:super)
keys
else
keys - [:auth_token]
end
end
希望这可以帮助其他人使用0.9.x版本