2017-12-15 5 views
0

ノードJSでミニCMSアプリケーションを構築しました。ユーザーは自分のプロファイルと管理者を編集してすべてのプロファイルを編集できます。私はロジックとの奇妙な問題がある - 私はこの構文を使用する場合は、管理者が他のユーザーのプロファイルを編集しようとしたとき、私はエラー(401)を得る:このロジックで何が問題になっていますか?ノードJS

if (!loggedUser.isAdmin || foundUser.id !== loggedUser.id) { 
    res.status(401).json(); 
} else { 
    // Save Updated User 
    foundUser.username = req.body.username; 
    foundUser.birthday = req.body.birthday; 
    foundUser.personalWeb = req.body.personalWeb; 
    foundUser.location = req.body.location; 
    foundUser.save().then(() => res.status(200).json(200)); 
} 

をしかし、私はこの構文を使用する場合、アクセス権はうまく動作します。

if (loggedUser.isAdmin || foundUser.id === loggedUser.id) { 
    // Save Updated User 
    foundUser.username = req.body.username; 
    foundUser.profileImg = req.body.profileImg; 
    foundUser.personalWeb = req.body.personalWeb; 
    foundUser.location = req.body.location; 
    foundUser.save().then(() => res.status(200).json(200)); 
} else { 
    res.status(401).json(); 
} 

誰かが2つの条件の間の差異を説明できますか?

+0

トップは '&&'にする必要があります。あなたは彼らが管理者ではない、またはユーザーが見つからないと言っているのに対して、下部には「管理者であるかユーザーが見つかった場合はクールだ」と言っているのです。 –

答えて

3

!loggedUser.isAdmin || foundUser.id !== loggedUser.idおよびloggedUser.isAdmin || foundUser.id === loggedUser.idは、お互いのブール値の逆数ではありません。

「最初は、ユーザーが管理者でないか、見つかったユーザーのIDがログインしたユーザーのIDと一致しません」というメッセージが表示されます。管理者の場合、IDが見つかったユーザーのIDと一致しないことが予想されます。

は、私はあなたの2番目のコードブロックを読み、あなたがそれを維持すべきであるが容易であると思いますが、あなたは負の条件をやってみたかった場合は、最初のそれは次のようになります。「にログインしている場合:ある

!loggedUser.isAdmin && foundUser.id !== loggedUser.id 

ユーザーは管理者ではありません見つかったユーザーのIDは、ログインしたユーザーのIDと一致しません。

これもブール逆である:

!(loggedUser.isAdmin || foundUser.id === loggedUser.id) 
// expands to 
!loggedUser.isAdmin && foundUser.id !== loggedUser.id 

よく私が思うに、私はブール否定の良いドキュメントや記述を見つけるすることが意外に難しかったが、この記事では、概念を説明します:http://www.math.toronto.edu/preparing-for-calculus/3_logic/we_3_negation.html

が、ブール式を単純化することができます。あなたと開発チームのために読み返すのが最も理にかなった方法で記述するのが最善の方法だと思いますので、読みやすいので最初のブロックを使用することをお勧めします。それができない場合は、表現が達成しようとしていることについてコメントを残してください。

0

foundUser.id !== loggedUser.idはあなた以外のユーザーを編集するときはtrueと評価されているからです。

これを追加するには、管理者以外のユーザーは、trueと評価される最初の条件のために401を取得します。

||の条件が満たされている限り、ボディが実行されて終了します。 1つの条件がfalseの場合、elseボディに移動しません。どちらも必要ですfalse

個人的に私はあなたの2番目の例を使用します。それはより読みやすい。

関連する問題