2017-06-28 9 views
2

基本的なルート認証にACL middlewareを設定しようとしています。この例では、ユーザー(この場合は自分)が '管理者'権限を持つようにしようとしています。'リソースへのアクセスが不十分なアクセス許可':Mongoose + Expressを使用したACLミドルウェア

私のルートは次のようになります。ミドルウェアで

// define the home page route 
router.get('/', acl.middleware(1, '594a984a9815beb8219dca22', 'admin'), function (req, res) { 
    acl.userRoles('594a984a9815beb8219dca22', function(err, roles){ 
     res.send(roles) 
    }) 
}) 

、私はメッセージを取得:

HttpError: Insufficient permissions to access resource 

私はミドルウェアなしでこのルートを実行する場合、usersRole()関数は、実際に来ません返信として

['admin'] 

を返します。 ACLが私を管理者として認識するために何が必要なのか分かりません。私は明らかに '管理者'の役割を持っています。

UPDATE

これは、接続コードです:

var dbConn = mongoose.connect(configDB.url); // connect to our database 
acl = new acl(new acl.mongodbBackend(mongoose.connection.db)) 

マイconfig.urlのビーイング:

module.exports = { 
    'url' : 'mongodb://127.0.0.1:27017/NodeMongo' 
} 
+0

問題がaclミドルウェア関数の定義なしでどのようになっているのか分かりません。 – MiiinimalLogic

+0

これはaclのドキュメントのバニラ定義です。https://www.npmjs.com/package/acl#middleware – Ravioli87

答えて

0

問題はマングースに接続しているの非同期性としなければなりませんでした。このルートの中では、mongoose/acl接続はすでに作成されていましたが、それ以前ではありません(たとえば、ミドルウェア関数呼び出し)。

私は最終的には基本的に、あなたがのコールバック内からACLオブジェクトを初期化する必要がありますAlex Mueller

によってそれをthis exampleへの感謝を行うための適切な方法を見つけました:

mongoose.connection.on('connected', function(test) { 
    require('./authorization').init(); 
}); 

次に、あなたのルートファイル内、完全に初期化されたaclオブジェクトにアクセスします。この例を参照してください。それは一緒に従うことは非常に簡単です。

関連する問題