2017-08-25 9 views
1

私は、自動車ディーラーが自動車在庫を管理するウェブサイトを持っていると言います。各自動車販売店にはそれぞれcompany_idがあり、そのスタッフはstaff_idのスタッフアカウントを使用します。ユーザーはデータベースクエリのアクセス権を持っていますか?

スタッフメンバーがページにあるときhttp://sellcarsfaster.com/inventory/car/jdksf9843 彼らは会社の車にidが表示されるはずです。彼らがこのURLをコピーして仲間のスタッフに送ったら、その他のスタッフは車を見ることができるはずです。しかし、URLがスタッフ以外のメンバーに送信された場合、そのユーザーは車を見ることができません。車は、その自動車販売店のスタッフにのみアクセス可能である必要があります。

これをさらに進めていくと、さまざまな関係のあるさまざまなアセットの多種多様な可能性のあるデータベースクエリのアクセス権を確認するにはどうすればよいでしょうか?このような次のように:

http://sellcarsfaster.com/inventory/car/jdksf9843/tires/93sl9843 http://sellcarsfaster.com/insurance/2djlasd8 http://sellcarsfaster.com/history/event/8o4jsdfj

は、このようなアプリで表示権限をチェックするためのベストプラクティスはありますか?バックエンドで何をすべきか?認証には計算量の多いデータベースクエリを実行する必要がありますか?各データベースクエリに対してカスタム認証関数を記述する必要がありますか? staff_idまたはcompany_idに基づいて認証するのは安全ですか?

誰かが正しい方向に私を指し示すことができれば、それは非常に感謝しています!

P.S. 私は現在、バックエンドにJSON Webトークン認証を持っていますが、異なる企業のスタッフがurlだけでインベントリを見ることはできません。あなたは、あなたが直接IAMポリシーを使用して、エンドポイントを認可することができ、APIゲートウェイを介して公開AWS CognitoとNodeJSバックエンドを使用することを計画している場合は、ユーザ認証

答えて

0

のためにAWS CognitoでNodeJSとのPostgresを使用して

。設定は以下のように要約されます。

  • セットアップCognito UserpoolsとあなたのNodeJSサーバーへのプロキシとしてごNodeJSのApp
  • セットアップAWS APIのゲートウェイと統合し、それに各ルートのパスを設定します。
  • IAM認証者を使用するようにAPIゲートウェイを設定します。
  • Cognito User Groups Featureを使用すると、各ユーザーグループがIAMポリシーで付与されたそれぞれのエンドポイントにアクセスできるIAMロール(ポリシー内)を添付できます。
  • NodeJSサーバーを直接アクセス(APIゲートウェイを介したアクセスのみ許可)するために、APIゲートウェイクライアント証明書を使用するか、別の認証メカニズムを使用できます。
0

JSON Webトークンは、お客様のシナリオに最適です。会社IDをトークンに格納することができます。誰もが同じURLを使用することができます。バックエンドではトークンを認証します。合格すると、トークンが変更されていないことを意味します。

**トークンが認証されたという事実は、あなたが提供したものであることを意味し、したがって合法です。 **

トークンの会社IDとURLから車のIDを取得します。SELECT * FROM vehicles where 'carID' = x AND 'companyID' = yのようなものを読み込むSQLクエリを作成するためのすべての情報が必要です。

データベースレスポンスが空の場合は、適切に処理します。

+0

問題は、これらのすべての異なるクエリがテーブルの 'company_id'にアクセスできないということです。例えば。 'タイヤ 'には' company_id'はありませんが 'car'には' company_id'があります – Kangzeroo

関連する問題