私は同じ質問を研究しており、いくつかの良いモジュールを見つけました。私はここで見つけることができるnode-aclパッケージに焦点を当てています。 https://github.com/optimalbits/node_acl。
このパッケージはACLパターンを非常に理解しやすい方法で実装しているようで、ノード/エクスプレスアプリケーションに簡単に統合する方法を提供しています。
まず、リソース、役割、およびアクセス許可を定義する必要があります。
たとえば、リソースが使用できます
/
/forums
/forums/threads
役割は、この例では
public
admin
user
john
jane
をすることができ、役割ジョンとジェーンは、実際のユーザーアカウントにマップすることができますが、彼らは継承しますユーザーロールのすべてのアクセス許可リソース
またはあなたの標準的なCRUD操作を破壊します。
これでこれらが定義されたので、node-aclを使用してaclを設定する方法を見てみましょう。これらのノートは、パッケージ
var acl = require('acl');
があなたのバックエンドをセットアップし
インポートドキュメントから派生しています。私のアプリは、MongoDBのを使用しているが、ノード-ACLパッケージはDBINSTANCE今すぐに私たちの役割を追加することができますmongoose.connection.db
に置き換えられるように、私のアプリはマングースを使用している他のストレージメカニズムに
acl = new acl(new acl.mongodbBackend(dbInstance, prefix));
をサポートしていますACL。 node-aclでは、役割に権限を与えることで役割が作成されます。その一石二鳥のような
acl.allow('admin', ['/', '/forum', '/forum/threads'], '*');
acl.allow('public', ['/', '/forum', '/forum/threads'], 'show');
acl.allow('user', ['/', '/forum', '/forum/threads'], ['create', 'show']);
は、新しいリソースがジョンによって作成されたと仮定します(何の鳥が実際に損をしている)、我々はジョンも更新し、そのリソースを削除することを可能にする新しいレコードを追加します。
acl.allow('john', ['/forum/threads/abc123'], ['update', 'delete']);
私のアプリケーションもexpressを使用していますので、ルーティングミドルウェアのアプローチを使用してルートを確認します。私のルーティング設定では、私はほとんどの特急構成でライン
を追加することになり、これはパラメータが渡されていない場合req.userIdで定義された役割がある場合、これはチェックします
app.post('/', acl.middleware(), function(req, res, next) {...});
app.post('/forums', acl.middleware(), function(req, res, next) {...});
app.post('/forums/:forumId', acl.middleware(), function(req, res, next) {...});
app.post('/forums/threads', acl.middleware(), function(req, res, next) {...});
app.post('/forums/threads/:threadId', acl.middleware(), function(req, res, next) {...});
posのためのように見えます特定されたリソース上でhttpメソッドを実行することを許可されています。
この例では、httpメソッドはpostですが、設定でidenitifiedされた各httpに対して同じことが実行されます。
これにより、以前に定義されたアクセス許可に関する質問が発生します。これらの質問に答えるために、我々は
を作成
- からパーミッションを変更しなければならない従来の
を破壊
- 更新
- を表示
- は
- は、この例では、ハードコードされたすべてのものを示しているが、より良い練習は、彼らが作成することができるので、自分の権限の管理インタフェースを持って読んで、更新することであり、なくても、動的に削除
を削除
を入れますコードを変更します。 私はnode-aclプラグインのアプローチが好きです。これは非常にまっすぐ前方で柔軟なAPIを使用してきわめてきめ細かな権限 - ロール割り当てを可能にするからです。彼らのドキュメンテーションにはもっとたくさんのものがあります。
うまくいけば、これが役に立ちます。
このように、明示的リソースでは機能しません。 – Patrick