2014-12-28 43 views
0

我正在寫一個MEAN.JS multiusers應用管理權限和一些行爲必須受到限制,所以我試圖找到「最佳實踐」在我自己的API來管理權限如何在RESTful API中

我正在考慮爲每個用戶設置一個權限數組,每個API都必須檢查需要的用戶是否具有所需的所有權限。

ex。

GET /api/foo/:foo would need "foo-read" 
POST /api/foo would need "foo-create" 
PUT /api/foo/:foo would need "foo-update" 
DELETE /api/foo/:foo would need "foo-delete" 

GET /api/foo/:foo/bar:/bar would need "foo-read" and "bar-read" 
POST /api/foo/bar would need "foo-create" and "bar-create" 
PUT /api/foo/:foo/bar:/bar would need "foo-update" and "bar-update" 
DELETE /api/foo/:foo/bar:/bar would need "foo-delete" and "bar-delete" 

這樣用戶可以獲得創建新用戶的權限,但不具有授予他們管理權限的權限。

我想知道這是否是最好的方法來做到這一點,或者如果有一些現有的middelware。

回答

1

使用授權框架。我使用cansecurity(完全披露:我是原作者)。它支持使用編程中間件和聲明性格式。

我會使用聲明這一點,因爲我喜歡讓我的server.js乾淨,和我所有的安全配置在同一個地方:

{ 
    "routes": [ 
     // [verb,path,default,[test params,] test condition] 
     ["GET","/api/foo/:foo","item.roles.foo_read === true"], 
     ["PUT","/api/foo/:foo","item.roles.foo_update === true"] 
    ] 
} 
+0

我可以在PassportJS上使用cansecurity嗎? – Edo

+0

我還沒試過。我想你的意思是使用護照進行身份驗證並使用cansec進行授權?我不明白爲什麼它不會,但我從來沒有嘗試過。如果你可以拿出一個用例來說明它如何一起工作(要點?),我可以看看它是否可以集成。 – deitch

1

也許你可以使用快遞中間件過濾器來做到這一點。

app.get(function(req,res,next){your code - res.end(data);}); 

var checkpermissions=function(req,res,next){ if bad permission raise error or print access denied page otherwise run next();}; 
app.get(checkpermissions,function(req,res,next){your code - res.end(data);}); 
0

我相信,訪問控制必須不依賴於REST API。 REST僅僅是一種傳遞方法,其細節可以非常快地改變,並且這不是唯一的單一傳遞方法,例如,我也可以創建傳統的HTML Web應用程序作爲傳遞方法。授權必須依賴於業務邏輯或換句話說域模型。因此,在您的情況下,授權必須位於REST API和業務邏輯之間,並且必須使用業務術語進行描述,而不是使用REST術語進行描述。在客戶端處理這個問題非常容易,因爲服務器只會發回每個響應所允許的鏈接,所以您在客戶端代碼中無所事事。現在如果你在服務器端有意大利麪代碼,那麼你有一個問題...

+0

如果我打開我的API,第三方的我不能依靠他們來應用我的商業邏輯 – Edo

+0

@Edo我不明白你在說什麼,但我想你不明白我寫的是什麼。 – inf3rno

+0

這是完全合理的,但只要你的答案對我無用,我就低估了它,但是無論如何感謝你的努力 – Edo