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