我一直在研究相同的問題,並遇到了一些很好的模塊。我一直關注可在此處找到的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包不支持其他存儲機制
acl = new acl(new acl.mongodbBackend(dbInstance, prefix));
我的應用程序是用貓鼬這樣dbinstance具備將與mongoose.connection.db更換
現在讓我們添加角色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,所以我將使用路由中間件的方法來檢查路由。在我的路由配置,我想補充的線
在大多數快遞配置,這就像是爲POS
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) {...});
當沒有參數傳遞,這將檢查是否在req.userId定義的角色允許對所標識的資源執行http方法,但執行路由。
在這個例子中,http方法是post方式,但是它會爲您在配置中識別的每個http執行相同的操作。
這引發了關於前面定義的權限的問題。要回答這些問題,我們必須從
傳統
雖然這個例子說明一切硬編碼的,更好的做法是讓你的權限的管理界面,使他們能夠創建,讀取,更新,動態刪除,而不修改你的代碼。
我喜歡node-acl插件的方法,因爲它允許使用非常直接和靈活的api進行非常細微的權限 - 角色分配。他們的文檔中有很多,我的示例演示是我使用這個軟件包。
希望這會有所幫助。
不幸的是,如上所述,這不適用於快遞資源。 – Patrick 2012-02-22 12:50:59