当用户对象处于羽毛续集多对多关联中时,如何访问它?



我正在尝试构建一个钩子,将某些用户操作限制到指定的安全角色。但是,当用户模型与另一个表相关联时,我在从第二个钩子访问用户记录时遇到了麻烦。

在我的用户的'before: get'钩子中,我目前有一个简单的测试,像这样:

authenticate('jwt'),
context => {
if(context.params.user){
console.log('TESTING:', context.params.user);
}
}

,它可以工作,显示用户详细信息:


TESTING: {
id: 12,
firstname: 'David',
lastname: 'Hoare',
systemrole: '1-admin',
createdAt: 2022-10-24T20:53:44.000Z,
updatedAt: 2022-10-24T20:53:44.000Z
}

当我添加关联时,


//just testing
context => {
if(context.params.user){
console.log('TESTING:', context.params.user);
}
},
// this adds the associations
context => {
const sequelize = context.params.sequelize || {};
sequelize.raw = false;
sequelize.include = [
{
model: context.app.services['groups'].Model,
as: 'groups'
}
];
context.params.sequelize = sequelize;
return context;
},

我得到用户记录下关联的完整相关组,如下所示:

TESTING: users {
dataValues: {
id: 12,
firstname: 'David',
lastname: 'Hoare',
systemrole: '1-admin',
createdAt: 2022-10-24T20:53:44.000Z,
updatedAt: 2022-10-24T20:53:44.000Z,
groups: [ [groups], [groups] ]
},
_previousDataValues: {
id: 12,
firstname: 'David',
lastname: 'Hoare',
systemrole: '1-admin',
createdAt: 2022-10-24T20:53:44.000Z,
updatedAt: 2022-10-24T20:53:44.000Z,
groups: [ [groups], [groups] ]
},
uniqno: 1,
_changed: Set(0) {},
_options: {
isNewRecord: false,
_schema: null,
_schemaDelimiter: '',
include: [ [Object] ],
includeNames: [ 'groups' ],
includeMap: { groups: [Object] },
includeValidated: true,
attributes: [
'id',
'firstname',
'lastname',
'systemrole',
'createdAt',
'updatedAt'
],
raw: true
},
isNewRecord: false,
groups: [
groups {
dataValues: [Object],
_previousDataValues: [Object],
uniqno: 1,
_changed: Set(0) {},
_options: [Object],
isNewRecord: false,
group_users: [group_users]
},
groups {
dataValues: [Object],
_previousDataValues: [Object],
uniqno: 1,
_changed: Set(0) {},
_options: [Object],
isNewRecord: false,
group_users: [group_users]
}
]
}

这在我的应用程序中一直工作到目前为止没有问题,允许我"获得"一个特定的用户,并查看他们也是其中一部分的所有组。

但是,当我尝试在不同的钩子中访问该用户记录时,(例如:抛出错误的'systemrole'值),它告诉我用户。用户对象是'undefined'…

很明显,序列化的'include'关联代码正在改变'context.params '。用户的对象……但我似乎无法从其他钩子访问新对象…如:

//just testing
context => {
if(context.params.user){
console.log('TESTING:', context.params.user.users); //TRY TO ACCESS THE "USERS" sub-object
}
},
// this adds the associations
context => {
const sequelize = context.params.sequelize || {};
sequelize.raw = false;
sequelize.include = [
{
model: context.app.services['groups'].Model,
as: 'groups'
}
];
context.params.sequelize = sequelize;
return context;
},

收益率:

TESTING: undefined

钩子的顺序似乎并不重要…是否有可能保持关联,但也访问关联的记录(或至少主要授权context.params.user对象)在不同的钩子?

谢谢!

Sequelize将在您执行find调用时返回sequilize对象,如果您想获得可以访问结果中的项的原始对象作为对象文字,请使用

转换它

raw: true

或者你可以使用

data = JSON.parse(JSON.stringify(data))

相关内容

  • 没有找到相关文章

最新更新