2017-10-13 43 views
0

我不明白为什么我的代码不工作。我有一个基本的类与两个类的方法。我想从第一个类中访问第二个类的方法,并且得到一个类型错误,说第二个方法不是函数。大声笑我一直这样做,我错过了什么?Node JS Javascript类型错误不是函数

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; 
+0

你是怎么从另一个组件调用它的? – cinnaroll45

+0

根据您对此的调用方式,可能会将其设置为其他内容。 – Cruiser

+0

我更新了帖子以显示来电的来源。我通过一系列对象将这些调用传递给RBAC。 – Aaron

回答

0

这是一个方面的问题,由裁判通过你的isGroupAdmin功能你失去跟踪的实例。我假定RBAC内部将通过callapply调用该功能。

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

+0

谢谢。这很好。 – Aaron

+0

@Aaron要考虑的一件事是做这些类需要成为实例吗?我看到你在那里管理某种状态('this.group'),但是值得确定它是否真的需要。这将允许你切换到一个完全无状态的模型,并且你的代码将按你喜欢的方式工作(当然有一些小的修改)。 – James

+0

我存储了组状态,因为我打算在isOrgSuper方法中使用它。如果组管理员检查为false,则需要确定用户是否为超级用户,这需要获取关联的组织并检查相对于userId的组织角色。我想这样做,而不是再次调用数据库来获得同一组。我敢打赌有更好的方法来做到这一点。我是一名职业前端开发人员,他们的角色和反应,我想开始学习后端。这个应用程序是我在前端和后端的第一个传球。任何意见是极大的赞赏。再次感谢。 – Aaron

相关问题