2016-02-25 15 views
11

node-reduxスタックの使用。クライアント側にはアクションクリエイターがあり、バックエンドには還元剤+還元状態があります。 は私が権限を実装するには、次の提案があります。reduxでの処理の許可

  1. アクションは、クライアント側に作成されているが、これらも、認証されたユーザーから、悪意のあるかもしれません。
  2. アクションがサーバーに送信されます。
  3. 要求はサーバー側で認証され、ユーザーのアクセス許可が確認されます。
  4. アクションはノードサーバー内にあるreduxミドルウェアを通過します。
  5. ミドルウェアは、アクションの種類に指定された権限とユーザーのアクセス許可をチェックします。
  6. ユーザーにアクションの正しいアクセス許可がある場合、レデューサーは新しいredux状態(サーバー上にも存在します)を作成します。


問題:

各アクションタイプはアクセス権のセットに結合され、これは、我々は決してアクションを行うことができないように私たちのレデューサーを作成細心の注意を払う必要があることを意味それ以上のもの。チームの複数の開発者と大規模なアプリケーションでは、これで十分であると私は確信していません。

質問:

  • 再来と取扱権限の良い議論との良好なリソース/リンクがあります。
  • 複合アクセス許可を処理するには十分ですか?
  • 上記で説明した権限を確認しても、私が言及していない問題があり、それでもなおreduxを使用しているときにこれに近づくより良い方法はありますか?
  • +0

    あなただけのサーバーが公開するエンドポイントどんなREST確保する上で、サーバー上での行動と状態を保つことによって保護するために何を期待していますか? – Tyrsius

    +0

    サーバ上で使用されるレデューサーは、現在クライアント側のアプリケーションで使用されているレデューサーになります。このようにすることは、我々が構築するフロントエンド減速機がサーバ側の状態を維持するのに十分であることを意味します。オプション2は、アクションのための残りのAPIを作成することです。これは私たちの行動を遅くし、私たちが定義するそれぞれの行動の定型化を意味します。 – Eoin

    答えて

    5

    Reduxは「許可には依存しません」。 Reduxは、アプリケーションの状態を更新するアクションを調整する単なるフレームワークです。そのような行動を許可するアプローチについての意見や勧告は含まれていません。

    は Reduxのでパーミッションを扱うには良い議論との良好なリソース/リンクはあり

    回答します。

    Here is one

    承認は、ビジネスのニーズに大きく依存するため、一般的な宣言を行うことは非常に難しいことです。あなたは役割を使っていますか?認証が必要なのですか?ユーザーは複数の役割を持つことができますか?複数の役割はどのように相互作用しますか?これらは1つの答えでの質問ではありません。

    複雑な権限を処理するには十分ですか?

    これは、複雑な権限を処理するにはJavaScriptで十分かどうかを確認するのと同じです。それは本当に意味をなさない。

    複雑なアクセス許可を処理することは、「可能」なのかどうかを考えてください。アクションはディスパッチ(別の関数)を呼び出す関数なので、Reduxはアクションレベルで実装したいパーミッションスキームを制限しません。アクションを使用して、何らかの理由でディスパッチコールを停止することができます。

    別のパースペクティブからは、追加のパターンやツールを使用せずに複雑な権限を処理できるすぐに使用できるメカニズムを提供しています。 Reduxはこの懸念に取り組もうとしませんが、それはあなた次第です。

    上記のようにアクセス許可をチェックすると、私が言及していない問題がありますが、まだreduxを使用しているときにこれに近づくより良い方法がありますか?

    あなたの実装を完全には説明していないので、あなたが言及していない問題があります。彼らが言うように、悪魔は詳細にあります。 どのようにを実行すると、あなたが遭遇したその他の問題が決まります。

    良い方法がありますか? 「より良い」はあなたが得るほど曖昧です。 「より良い」というあなたのパラメタは何ですか?開発スピードと実行時パフォーマンスとの間のトレードオフでは、どちらを選択しますか?サーバーコールの数と許可の細かさのトレードオフがありますが、どれを好むでしょうか?

    あなたが言ったことは、あなたがサーバー上のアクションを確認していることだけです。認可モデルが何であるかを知らなければ、あなたが何をしているのかわからないので、より良い方法が存在するかどうかを言うことは不可能です。しかし

    、はい、そこになります(することができ、私はできるだけ弱い)あなたが持っている情報を与えられ、チェックサーバー側を行うことは必要で時間の節約(もう一つの大きな仮定)の両方であると仮定すると、私が言います追加の問題があります。

    • 待ち時間:いくつかの名前を付けます。 Reduxは、入力フィールドの値を含むアプリケーションの状態全体を想定しています。モデルは各アクションでサーバーをチェックするので、入力を更新することが許可されていることを確認するために、すべてのキーストロークがサーバーに送られます。これにより、ユーザーのやりとりが非常に遅くなり、非常にイライラします。
    • 帯域幅。これは、上記の理由から、多くの帯域幅を消費することになります。
    • CPU。上記の理由から、これは非常にサーバーのCPUを大量に消費することになります。

    クライアントサイドのアプリケーションで大きな勝利を挙げるのは、サーバーではデータの処理(jsonのような最小限の形式)と、データの更新要求の確認だけです。すべてのクライアントが実行されているの追加作業を引き継ぐ予定です。これは、REST APIを記述するためのボイラープレートを減らすことに疑問のあるトレードオフです。

    これは、あなたのアクションapiにあなたをロックし、還元します。 REST APIは、クライアントに依存しないという利点があります。reduxから変更したり、アクションを再構成したりすると、サーバー上のREST APIは変更する必要はありません(少なくとも変更する必要はありません)。これはあなたがレピュックスを抱えていても、痛いリファクタリングをするつもりです。これがREST APIを書く苦労を克服するかどうかは、言うまでもありませんが、考慮すべき点です。

    関連する問題