gpt4 book ai didi

javascript - Node JS Javascript Class TypeError 不是函数

转载 作者:行者123 更新时间:2023-12-03 22:40:58 24 4
gpt4 key购买 nike

我不明白为什么我的代码不起作用。我有一个带有两个类方法的基本类。我试图从第一个方法中访问第二个类方法,但收到一个类型错误,指出第二个方法不是函数。大声笑我一直这样做,我错过了什么?

import models from '../../db';

class GroupRoleCheck {

constructor() {
this.group = null;
}

isGroupAdmin(params, callback) {
let groupId = params.groupId;
let userId = params.user.id;

models.Group.findById(groupId, {
include: [{ all: true }]
})
.then(group => {
this.group = group;

let found = this.group.Users.find(user => {
return userId === user.id;
});

if (found) {
return found.GroupMembers;
}
})
.then(members => {

if (members.role === 'groupAdmin') {
return callback(null, true);
} else {

this.isOrgSuper();

return callback({
message: 'not authorized'
}, false)
}
})
}

isOrgSuper() {
console.log('===================================');
console.log(this.group);
console.log('===================================');
}
}

export default GroupRoleCheck;

enter image description here

enter image description here

更新:

我正在从另一个文件中调用它,我正在实现 RBAC2 并传递调用 rbac。
import RBAC from 'rbac2';

import UserRoleCheck from '../permissions/user.permission';
import OrgRoleCheck from '../permissions/org.permission';
import GroupRoleCheck from '../permissions/group.permission';

let userRoleCheck = new UserRoleCheck();
let orgRoleCheck = new OrgRoleCheck();
let groupRoleCheck = new GroupRoleCheck();

let rules = [
// Users:
{
a: 'admin',
can: 'view organizations',
when: userRoleCheck.isOrgAdminAll
},
// Organizations:
{
a: 'admin',
can: 'view org details',
when: orgRoleCheck.isOrgAdmin
},
{
a: 'super',
can: 'edit org details',
when: orgRoleCheck.isOrgSuper
},
{
a: 'super',
can: 'delete org',
when: orgRoleCheck.isOrgSuper
},
// Groups:
{
a: 'admin',
can: 'create group',
when: orgRoleCheck.isOrgAdmin
},
{
a: 'admin',
can: 'view group details',
when: groupRoleCheck.isGroupAdmin
},
{
a: 'super',
can: 'edit group details',
when: orgRoleCheck.isOrgSuper
},
{
a: 'super',
can: 'delete group',
when: orgRoleCheck.isOrgSuper
}
];

let rbac = new RBAC(rules);
export default rbac;

最佳答案

这是一个上下文问题,通过 ref 传递您的 isGroupAdmin 函数,您会丢失对实例的跟踪。我认为 RBAC 在内部将通过 callapply 调用该函数。

简单的解决方法是以 when 调用实例上的函数的方式更新您的规则,例如when: (params, cb) => orgRoleCheck.isGroupAdmin(params, cb)

关于javascript - Node JS Javascript Class TypeError 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46730706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com