2017-10-13 18 views
0

私のコードが機能しない理由を理解できません。私は2つのクラスメソッドを持つ基本クラスを持っています。私は最初から2番目のクラスのメソッドにアクセスしようとしていますが、2番目のメソッドが関数ではないというエラーがタイプされています。 LOL私はこれをいつもしていますが、私は何が欠けていますか? ノードJS JavascriptクラスTypeErrorが関数ではありません

enter image description here

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

更新:

私は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が内部でcallまたはapply経由で関数を呼び出していると推測します。

簡単な修正は、whenがインスタンス上で関数を呼び出すようにルールを更新することです。 when: (params, cb) => orgRoleCheck.isGroupAdmin(params, cb)

+0

ありがとうございます。それはうまくいった。 – Aaron

+0

@Aaronこれらのクラスはインスタンスである必要がありますか?私はあなたがそこで何らかの状態を管理しているのを見ます( 'this.group')。しかし、それが本当に必要かどうかを判断する価値はあります。そうすれば、完全にステートレスなモデルに切り替えることができ、あなたのコードは好きなように動作します(もちろん、小さな変更もあります)。 – James

+0

私はisOrgSuperメソッドで使用する予定であるため、グループ状態を保存しました。グループ管理者のチェックが偽の場合、ユーザーがスーパー管理者であるかどうかを判断する必要があります。これは、関連付けられている組織を取得し、userIdに対してorgロールを確認する必要があります。私は同じグループを取得するためにdbに別の呼び出しを行うのではなく、そのように考えました。私はこれを行うより良い方法があると確信しています。私は職業によって、角度のあるフロントエンドの開発者であり、私はバックエンドの学習を始めたいと思っていました。このアプリケーションはフロントエンドとバックエンドの両方で初めてのパスです。アドバイスをいただければ幸いです。再度、感謝します。 – Aaron

関連する問題