2016-06-26 6 views
0

さまざまなユーザーからmongodb(mongooseを介してアクセス)に格納されているコンテンツへのアクセスを制御/制限する方法を知りたいと思います。ユーザーのために最後の意志を保存するデータモデルがあるとしましょう。Mongo-Databaseのユーザー固有のコンテンツの制御/制限

私のアプローチは、次のようになります。

  1. ログイン:セッションでは、ユーザー名とパスワードを経由してストアのユーザー名を認証します。
  2. ミドルウェア:保存されたユーザ名を検索してユーザIDを返し、req-object(req.userId)にアタッチします
  3. 実際のコンテンツを取得する場合は、 willIdと一致するuserId(これも意志モデルに格納されています)の2つの条件で有望モデルにクエリを実行します。

これはどのようにしても妥当か保存されますか?ベストプラクティスを見つけることができず、すべての例は基本的に認証で終了します。

答えて

2

ステップ1と2は、passport-localを使用してカバーすることができます。

ステップ3は、ユーザーが所属しており、willIduserIdの両方が、そのユーザーが特定の有権者のドキュメントにアクセスする必要があるかどうかを判断するために必要です。

セキュリティはセッションIDに基づいているため、明らかにHTTPSを使用し、httpOnlysecuresession cookiesを使用する必要があります。

+0

だから、ドキュメントをデータベースに並べて格納し、willIdとuserIdを経由して正しいクエリでアクセスを制限するのは問題ないと思いますか?さて、ありがとう! – Seltsam

+1

はい、問題ありません。 – robertklep

2

認証を実装する3つの方法のいずれかを使用して、私が選択するオプションはミドルウェアを使用することです。

それはきれいオプションになり、コード 機能性と将来の変化のために維持することは容易にほとんど影響を与え、また、分離 認証および承認の概念を。

私は使ったことがありませんが、私が作る必要があるプロジェクトでthis packageを使用することを念頭に置いています。ルールを定義して特定のルートで使用することができます。それは手動で実装するにはあまりにも難しいことではありませんが、

app.get('/', *user.can('access home page'), function (req, res) { 
    res.render('private'); 
}); 
app.get('/private', *user.can('access private page'), function (req, res) { 
    res.render('private'); 
}); 
app.get('/admin', *user.can('access admin page'), function (req, res) { 
    res.render('admin'); 
}); 

*事前に定義されたルール

+0

確かに、各ルートに注入された個々のミドルウェアは、与えられたものです。それは私の質問の焦点では​​なかったので、私はこの詳細を残しました。私の質問は、ユーザー固有のデータをmongoデータベースに安全に格納してアクセスする方法に関するものです。 – Seltsam

関連する問題