حان الوقت للمهمة الثالثة في هذه الدورة.
في هذه الوحدة، لقد تم استكشاف مصادقة المستخدم في الكثير من التفاصيل.
الآن، في هذا الواجب،
سنعمل أكثر على مصادقة المستخدم.
سنقوم بإضافة فئة أخرى من الحسابات تسمى كمسؤول.
حساب المسؤول هو حساب السوبر الذي لديه
الكثير من الامتيازات لتنفيذ عمليات مختلفة.
يمكن لحساب المستخدم العادي تنفيذ عمليات معينة فقط على خادمنا.
وبالمثل،
يمكن للطلب غير المسجل الوارد من عميل لم يتم تسجيل الدخول إجراء عمليات معينة فقط على الخادم الخاص بنا.
الآن، نحن ذاهبون لتعديل الخادم لدينا
بحيث الحصول على عمليات يمكن أن يؤديها أي شخص.
لا تحتاج إلى تسجيل الدخول إلى النظام لإجراء عمليات الحصول على
نقاط النهاية المختلفة لواجهة برمجة التطبيقات باستثناء تقديم التعليقات.
بالنسبة للعمليات المتبقية على بقية نقاط نهاية API،
يقوم POST بوضع العمليات وحذفها،
سيتم تقييد تنفيذها فقط من قبل مستخدمي المشرف،
ولا يمكن للمستخدم العادي تنفيذ هذه العمليات.
من الواضح أنك لا تريد أن يقوم المستخدم العادي بتقديم أطباق جديدة، أو عروض ترويجية،
أو معلومات القائد، أو تعديل المعلومات الموجودة،
أو حتى حذف هذه المعلومات الموجودة.
يجب أن يكون هذا امتيازًا لمسؤول النظام فقط لخادمنا.
أيضا، سوف نضمن أن المستخدم العادي يمكن
نشر تعليقات حول أطباق محددة، وهذا أمر مقبول.
وبالمثل، يمكن للمستخدم العادي تحديث وحذف التعليقات التي قام بنشرها.
المستخدمين الآخرين أو حتى المشرف لا يمكن تحديث أو حذف التعليقات المنشورة من قبل مستخدم آخر.
إذن، هذا قيد آخر سنضعه في خادمنا.
الآن، دعونا نمضي قدما وفحص كيف نحن ذاهبون نحو
تنفيذ هذا وكيف بالضبط خادمنا يفعل هذه العمليات.
أولا وقبل كل شيء، وسوف أوضح لك كيف يمكنك
إنشاء حساب المشرف في النظام الخاص بك.
سوف تدرك أنه يجب علينا أن نذهب وراء
الكواليس لإنشاء حساب مشرف ببساطة
لأننا لا نريد إنشاء حساب مشرف عن طريق تنفيذ
عملية الاشتراك على حساب المستخدمين/الاشتراك.
هذا سيترك خادمنا عرضة للهجمات.
لذلك، لا يمكن إعداد حساب المشرف إلا
وراء الكواليس عن طريق الوصول مباشرة إلى قاعدة البيانات.
لذلك، دعونا ننظر في كيفية القيام
بذلك في الرسم التوضيحي الذي سأريكم بعد ذلك مباشرة.
الآن، لفحص قاعدة البيانات الخاصة بنا،
اسمحوا لي أن أبدأ تموج
مونجو في موجه الأوامر، ثم انتقل إلى مجلد الارتباك ثم اسمحوا لي
أن أفحص المستخدمين الذين تم تسجيلهم في قاعدة البيانات الخاصة بي في هذه اللحظة.
لذلك، يمكنك أن ترى أن لدي مستخدم واحد فقط مسجل.
لذلك، اسمحوا لي أن إعداد حسابين إضافيين
،
واحد لمستخدم عادي، والآخر الذي سيكون المشرف.
لذلك، سنقوم بالتسجيل في المشرف والمستخدم الثاني أيضًا من نقطة الاشتراك لدينا،
وبعد ذلك سيعودون إلى تموج Mongo ثم إعداد حساب المشرف
بشكل صريح عن طريق تعديل السجل في قاعدة البيانات الخاصة بنا.
الذهاب إلى دبوس ساعي البريد،
اسمحوا لي الاشتراك اثنين من المستخدمين الإضافيين.
لذلك، كنا قد وقعت في وقت سابق مستخدم واحد مع هذا الاسم،
لذلك أنا ذاهب لتسجيل مستخدم آخر في النظام الخاص بي،
وهكذا، يتم تسجيل مستخدم ثان الآن بنجاح.
الآن، اسمحوا لي أيضا تسجيل حساب المشرف.
لذلك، بالنسبة لحساب المشرف،
سأقوم بإعداد اسم المستخدم كمسؤول ثم قم بتسجيل مستخدم مشرف.
لذلك، نرى أننا أضفنا الآن حسابين جديدين إلى نظامنا.
الذهاب إلى تموج مونغو،
اسمحوا لي مرة أخرى تكرار
db.user.find () واسمحوا لي أن تفعل ذلك جميلة بحيث يبدو أكثر سهولة في القراءة.
لذلك، عندما أفعل ذلك،
يمكنك أن ترى أن لدينا حساب مشرف هنا مع اسم المستخدم كمسؤول.
تجاهل الاسم الأول واسم العائلة،
سأقوم بإعداد هذا الاسم الأول واسم العائلة ليكون هو نفسه لجميع الثلاثة.
ثم، لدينا حساب المستخدم الآخر الذي قمت بإعداده مع اسم المستخدم هنا،
وحساب المستخدم الثالث الذي كان لدينا بالفعل في قاعدة البيانات الخاصة بنا.
لذلك، لدينا الآن ثلاثة حسابات المستخدمين؛
حسابان للمستخدمين هنا،
وحساب المشرف.
الآن، بالطبع، سترى أنه في حسابات المستخدمين،
لدينا هذه العلامة تسمى علامة المشرف التي تم تعيينها إلى false
لأي حساب تم توقيعه على نقطة النهاية هذه /المستخدمين/الاشتراك.
هذه هي الطريقة الافتراضية التي يجب عليك إعداد الحسابات.
لا يمكنك السماح لمستخدم بتكوين حساب مسؤول
عن طريق القيام بأي شيء مباشرة على نقطة نهاية واجهة برمجة التطبيقات المتبقية.
بدلا من ذلك، سوف نذهب وراء الكواليس ومن ثم في تموج مونجو،
وأنا ذاهب لتعديل هذا السجل للمستخدم المشرف عن طريق
قول db.users.update وبعد ذلك
سنقوم بتوفير اسم المستخدم كمسؤول هنا.
لذلك، سنقوم بتحديث سجل الآية وبعد ذلك سنقول {$ set:
أذكر كيف كنا نتلاعب MongoDB لذلك
سنقول {$ set: {"admin»: «true»}}.
لذا، ما نقوم به هنا هو أننا
نبحث عن حساب المستخدم هذا مع مسؤول اسم المستخدم،
ومن ثم نقوم بإعداد علامة المشرف إلى true
هنا باستخدام خيار مجموعة $.
لذلك، هذه هي الطريقة التي سنقوم بتحديث حساب ليكون حساب المشرف.
لذلك، ترى أن هذا قد عدل النتائج.
لذلك، دعونا مرة أخرى التحقق من الحسابات.
الآن، عند التحقق من الحساب،
سترى أنه لحساب المشرف،
يتم تعيين علامة المشرف الآن إلى true،
بحيث ينتهي بك الأمر إلى إنشاء حساب مسؤول.
الآن، حساب المشرف كما نتوقع لديه امتيازات إضافية.
لذلك، بمجرد إكمال هذه المهمة،
ستلاحظ أن عملية الحصول على يمكن أن يؤديها أي مستخدم
على/أطباق /aspecificdishendpoint/الترقيات
و /الترويج/specificpromotionendpoint وبالمثل،
للقادة في النقاط أيضا.
ولكن لا
يمكن تنفيذ عمليات POST ووضعه وحذفه على نقاط النهاية هذه إلا من قبل مستخدمي المشرف.
الآن، بالإضافة إلى ذلك، نقطة نهاية التعليقات،
فإننا سوف نسمح فقط للمستخدم المسجل الذي قام بتسجيل الدخول
للوصول إلى التعليقات لطبق معين،
وسوف نسمح للمستخدم تسجيل الدخول لنشر التعليقات.
لقد قمنا بالفعل بإعداد هذا في التمرين لذلك،
عندما يقوم المستخدم بنشر التعليق،
فقد تأكدنا من أننا نتحقق
من صحة المستخدم ثم عندما يتم نشر التعليق،
قمنا بإعداد معرف المؤلف للتعليق باستخدام معرف المستخدم.
لذلك، لقد أكملنا ذلك بالفعل.
ولكن الآن، بالإضافة إلى ذلك،
بالنسبة لعمليات البيع والحذف على التعليقات،
سيسمح فقط للمستخدم الذي قدم التعليق المحدد بوضع وحذف العمليات على تعليقاته الخاصة.
لا يمكن لأي مستخدم آخر تعديل تعليقات شخص آخر.
وبالمثل، حتى المشرف لا يمكن تعديل تعليقات شخص آخر،
أو حذف تعليق شخص آخر.
لذا، هذا هو الجزء الثاني من هذه المهمة الذي ستقوم به.
الجزء الثالث هو أن المشرف يمكن الاستعلام
عن/المستخدمين نقطة النهاية وطلب قائمة المستخدمين المسجلين،
لا يمكن لأي مستخدم عادي آخر القيام بهذا الاستعلام.
لذا، هذا هو التقييد الآخر الذي سنضعه هناك.
الآن، من أجل التحقق من أن المستخدم هو المسؤول،
ونحن سوف تحقق أولا من أن المستخدم هو مستخدم مسجل.
لذلك،
يجب تطبيق وظيفة المستخدم التحقق التي قمنا بتنفيذها بالفعل في authenticate.js حتى عندما تحتاج إلى التحقق من المسؤول.
أولاً، يمكنك التحقق من أنه مستخدم تم التحقق منه، بعد ذلك،
ستقوم بإدخال وظيفة أخرى تسمى VerifyAdmin في
ملف authenticate.js والتي ستتحقق للتأكد من أن المستخدم مسؤول.
الآن، للتحقق مما إذا كان المستخدم هو المشرف،
كل ما عليك القيام به هو التحقق من rec.user الموجود على
كائن الطلب rec.user هناك،
تحقق لمعرفة ما إذا كانت علامة المشرف صحيحة أم لا.
إذا كانت علامة المشرف صحيحة،
فستسمح بالعملية العادية للمضي قدما إلى حدوث [غير مسموع].
إذا لم يكن المستخدم مسؤولاً،
فسوف تقوم بإنشاء خطأ وإرسال رسالة خطأ مرة أخرى إلى جانب العميل.
لذا، هذه هي الطريقة التي سنتعامل بها مع حساب مستخدمي المشرف.
الآن، عندما يحاول المستخدم تعديل أو حذف تعليقاته الخاصة،
يجب علينا التحقق للتأكد من أن مؤلف التعليق هو
نفسه المستخدم الذي يحاول تعديل التعليق.
الآن، يحتوي rec.user أيضًا على حقل المعرف،
لذلك تحتاج إلى عبور التحقق من ذلك مع حقل المؤلف للتعليق.
إذا كانت هذه المباراة اثنين،
ثم سوف تسمح للمستخدم لتنفيذ وضع أو حذف العمليات.
إذا لم تتطابق،
فلن تسمح بعمليات البيع أو الحذف على هذا التعليق المحدد.
لذلك هذا هو الجانب الآخر الذي ستقوم
بتنفيذه كجزء من مهمتك الثالثة.
دعونا ننظر في كيفية عمل كل هذه الأشياء
باستخدام ساعي البريد لتنفيذ عملية مختلفة على خادمنا.
العودة إلى ساعي البريد،
اسمحوا لي أولا إجراء عملية GET على
الأطباق لمجرد التحقق لمعرفة ما هو في قاعدة البيانات الخاصة بي.
لذلك، إذا قمت بإجراء عملية جيت على الأطباق،
لاحظ أنني لا أضع أي مصادقة في الرأس.
عملية GET مسموح بها من قبل أي شخص.
لذلك، عندما أقوم بإجراء عملية GET،
أستطيع أن أرى أن لدي بالفعل طبق واحد مع تعليق بالفعل في هذا الطبق.
تم نشر هذا التعليق من قبل هذا المستخدم بالفعل.
لذلك، لدينا بالفعل طبق واحد في النظام هناك.
لذلك، هذا على ما يرام تماما،
وأنا ذاهب لحذف الطبق.
الآن، لحذف الطبق،
من الواضح أن العملية لا يمكن أن يؤديها مستخدم عادي.
لذلك، اسمحوا لي تسجيل الدخول كما،
حتى تتمكن من رؤية أنني تسجيل الدخول كمستخدم عادي.
لذلك، اسمحوا لي تسجيل الدخول كمستخدم عادي.
لذلك، عندما أقوم بتسجيل الدخول، سأحصل على الرمز المميز.
لذا، سأقوم بنسخ هذا الرمز المميز وحفظه.
الآن، أن لدي الرمز المميز الخاص بي،
اسمحوا لي بإجراء عملية DELETE على الأطباق.
لذلك، عندما أذهب إلى عملية DELETE.
لذلك، اسمحوا لي أن حدد هذا GET ثم القيام بعملية DELETE مع الأطباق.
في الرأس، دعني أقوم بتضمين التفويض هنا وستلاحظ
أنه عندما نقوم بلصق الطلب ثم نرسل تفويض DELETE،
ستلاحظ أنه يأتي على الفور مع هذه الرسالة هنا،
كما ترون في المعاينة،
تقول «أنت غير مأذون له تنفيذ هذه العملية! «
ثم رمز الخطأ هو 403 ممنوع.
لذا، هذه رسالة تم إنشاؤها بواسطة
وظيفة VerifyAdmin التي ستقوم بتنفيذها كجزء من هذا التمرين.
لذا، إذا لم يكن المستخدم مشرفًا،
فهذه هي الرسالة التي
ستولدها VerifyAdmin ولن تسمح للطلب بتجاوز هذه النقطة.
لذلك، يمكنك أن ترى أنني قد أغلقت عملية DELETE.
الآن، كيف تفعل هذا؟
في التعليمات البرمجية الخاصة بك، كنت قد رأيت أنه من أجل تطبيق فيريفيوسر،
قمنا بتعيين المصادقة. فيريفيوسر في
عمليات بوست، بوت، و ديليت.
الآن، يمكنك سلسلة الوسيطة واحدة تلو الأخرى.
لذلك، يمكننا أن نقول فاصلة authenticate.VerifyUser
ثم بعد ذلك يمكنك أن تقول authenticate.VerifyAdmin،
لتطبيق فيريفيادمين مباشرة بعد فيريوسر.
لذا، إذا كنت تريد أن تقتصر العملية على المشرف فقط،
فأنت أولاً تقوم بجزء VerifyUser ثم بعد ذلك مباشرة،
يمكنك تطبيق الوسيطة VerifyAdmin.
مباشرة بعد ذلك لذلك، إذا كانت هذه الشيكات اثنين،
تمر بنجاح من خلال، ثم سوف تذهب إلى تنفيذ العملية.
إذا فشل التحقق فيريفيادمين،
ستعود رسالة الخطأ هذه كما ترى
هنا ثم قم بإجهاض العملية هذا الجزء.
لذلك، ستعود الخطأ التالي من VerifyAdmin الخاص بك،
إذا لم يكن المستخدم مسؤولاً.
لذلك، لقد أظهرت لك كيف
ستستخدم حساب مستخدمي المشرف لتقييد العمليات لعمليات PUT و
POST و DELETE.
نفس الشيء، لن يسمح أيضًا بعمليات POST و PUT على أي من هذه الأجزاء n.
الآن، ثم اسمحوا لي أن أوضح الجانب الآخر هنا.
لذلك، رأيت أنه هناك،
عندما نقوم بإجراء عملية GET،
رأيت أن هناك بالفعل تعليق تم نشره بواسطة اسم المستخدم Jogesh،
المستخدم الأول الذي هو في نظامي.
الآن، أنا ذاهب لتسجيل الدخول كمستخدم آخر.
لذلك، سوف أقوم بتسجيل الدخول في حسابي الثاني وهو Muppala ثم عند تسجيل الدخول،
أحصل مرة أخرى على الرمز المميز.
لذلك، اسمحوا لي أن أخذ هذا الرمز هنا.
دعني أنسخ هذا الرمز المميز
الآن، ما سأقوم به هو أنني سأفعل GET على أطباق المضيف المحلي.
لذلك، اسمحوا لي أن أفعل GET على أطباق localhost لتظهر لك التعليق المحدد داخل هنا.
لذلك، هذا التعليق معين مع هذا المعرف.
لذا، ما سأفعله هو،
سأقوم بنسخ بطاقة هوية الطبق تلك.
سأقوم أيضًا بنسخ معرف التعليق من هنا وسأقوم
بإجراء عملية DELETE على هذا الطبق المحدد
وأذكر أن لدينا
شرطة مائلة للتعليقات ثم معرف التعليق الخاص.
الآن، تذكر أن هذا التعليق تم نشره بواسطة اسم المستخدم هذا،
لكنني قمت الآن بتسجيل الدخول إلى نفسي كمستخدم آخر مع اسم مستخدم مختلف.
لذلك، عندما أقوم الآن بإجراء عملية DELETE باستخدام الحساب الآخر،
ستلاحظ على الفور أنه هنا يقول،
«أنت غير مسموح لك بحذف هذا التعليق! «
ثم يقول 403، نفس الشيء.
إذا حاولت إجراء عملية PUT على هذا التعليق المحدد الذي تم تسجيل الدخول كمستخدم آخر،
فستقول، «أنت غير مأذون له بتحديث هذا التعليق!»
لذلك، لا يُسمح بكل من PUT و DELETE و UPDATE لتعليق شخص آخر.
حتى الآن، اسمحوا لي أن تسجيل الدخول كمسؤول في هذه المرحلة ثم اسمحوا لي
أن أحاول حذف هذا التعليق معين وسترى أنه سيتم إنشاء نفس الرسالة.
لذلك، لا يمكن للمشرف أيضًا حذف تعليقات شخص آخر أو تحديثها.
لذلك، لتسجيل الدخول كمسؤول،
اسمحوا لي أن أذهب إلى بوست هنا ثم اسمحوا لي تسجيل الدخول كمسؤول.
الآن، تذكر أن هذه الرموز ستكون صالحة لمدة 33،600 ثانية.
لذلك، يمكنك حفظ هذه الرموز الثلاثة التي تقوم بإنشائها للمستخدمين الثلاثة.
لذلك، لا تحتاج إلى الاستمرار في تسجيل الدخول كمستخدم معين.
طالما أنك تستخدم الرمز المميز الصحيح في الرأس،
فستؤدي عملياتك بشكل جيد تحديد المستخدمين الثلاثة المختلفين.
لذلك، اسمحوا لي تسجيل الدخول كمشرف هنا.
لذلك، عندما أقوم بتسجيل الدخول كمشرف،
أحصل على الرمز المميز هنا.
لذلك، أنا ذاهب لنسخ وحفظ هذا الرمز المميز.
فقط تذكر أي رمز ينتمي إلى من عندما تقوم بعمل نسخة من هذا.
الآن، والعودة إلى هذا، حذف عملية التعليق.
سأذهب إلى الرأس ثم سأقوم بتغيير هذا إلى الرمز المميز
للمشرف ثم حاول إجراء نفس عملية DELETE ثم ترى
أنه حتى المشرف غير مأذون بحذف التعليق الذي تم نشره من قبل مستخدم آخر.
و هذا مقبول تماما.
ولكن دعونا نحاول حذف نفس التعليق،
من قبل هذا المستخدم الذي أنشأ
هذا التعليق وسترى أنه يمكن القيام بذلك بنجاح.
لذلك، دعونا تنفيذ هذه العملية.
لذلك للقيام بذلك، سأعود وأحضر الرمز المميز الذي
حصلت عليه للمستخدم الأول ثم قم بتغيير حقل التخويل.
الآن، لعملية DELETE هذه،
سأقوم بتغيير هذا إلى حامل،
ثم هذا هو الرمز المميز للمستخدم الأول مع اسم المستخدم Jogesh.
لذلك، عندما أحاول حذف هذا التعليق،
ستلاحظ أن التعليق تم حذفه الآن بنجاح.
لذلك، كما ترون من الخطوات،
يمكن حذف التعليق فقط من قبل المستخدم الذي أنشأ هذا التعليق.
الآن، الخطوة التالية،
عندما نقوم بعملية DELETE على الأطباق،
رأينا في وقت سابق أنه إذا فعلنا عملية DELETE كمستخدم عادي،
يمكنك الحصول على رسالة تقول،
«أنت غير مأذون لتنفيذ هذه العملية!»
لذلك، سأقوم بتغيير هذا الرمز المميز إلى الرمز المميز للمشرف ثم
تظهر لك أن المشرف يمكنه إجراء عملية DELETE على الأطباق والوعاء.
لذا، عند الدخول في هذا الطلب،
دعني أغير الرمز المميز ليكون الرمز المميز لمستخدم المشرف.
لذلك، عندما أقوم بإجراء عملية DELETE كمستخدم مشرف،
ستلاحظ أن عملية DELETE
ناجحة ثم ترد مرة أخرى مع الرسالة هنا.
الآن، عندما أفعل GET على نقطة نهاية الأطباق،
ستلاحظ أن عمليات GET تظهر أن أطباقي قد أفرغت.
الآن، العملية الأخرى التي ستنفذها أيضًا في هذا الواجب،
هي أنه يمكننا إجراء عملية GET على نقطة نهاية المستخدمين المائلة.
لذلك، عند إجراء عملية GET على نقطة نهاية المستخدمين شرطة مائلة،
ستلاحظ أنه إذا لم تكن مستخدمًا مفوضًا،
فستقول أنك غير مأذون له بتنفيذ هذه العملية.
لذا، فإن المضيف المحلي: 3000/المستخدمين/نقطة النهاية،
فأنت الآن ستسمح بتنفيذ هذا فقط من قبل المشرف.
لذلك، إذا كان المستخدم العادي،
إذا قمت بتسجيل الدخول كمستخدم عادي مع رأس،
فلن يسمح لك بتنفيذ هذه العملية.
الآن، اسمحوا لي تغيير هذا الرمز المميز إلى الرمز المميز
قبالة المشرف وبعد ذلك سترى أنه
سيتم السماح للمشرف لتنفيذ هذه العملية.
لذا، انتقل إلى GET،
دعني أغير هذا الرمز المميز إلى الرمز المميز
لمستخدم المشرف ثم عندما أقوم بإجراء عملية GET على ذلك، فإنه يعود.
كما ترون، المستخدمين الثلاثة التي تم تسجيلها في النظام الخاص بي،
فإنه يظهر رقم المستخدم واحد،
رقم المستخدم اثنين، ورقم المستخدم ثلاثة.
بالطبع، لاحظ أنه تتم إزالة التجزئة والملح،
عندما يتم إرجاع الرسالة بواسطة جانب الخادم إلى جانب العميل.
لذلك، لن يتم الكشف عن معلومات التجزئة والملح في الخارج.
لذلك، سوف يعتني Mongos تلقائيًا
بتصفية تلك المعلومات قبل أن يرسل معلومات المستخدم مرة أخرى.
لذلك، لأنك لا ينبغي أن تكشف عن
معلومات التجزئة والملح للعالم الخارجي.
لذلك، هذه هي معلومات حسابات المستخدمين الثلاثة التي يتم إرجاعها.
لذلك، يتم إرجاع هذا فقط إذا قمت بإجراء عملية GET
على نقطة نهاية المستخدمين شرطة مائلة كمستخدم مشرف.
إذا قمت بتنفيذ نفس الطلب مثل أي مستخدم آخر،
فلن يكون ذلك مسموحًا به.
لذلك، مرة أخرى سوف تحقق أولا،
فيريفيوسر ثم تحقق من فيريفيادمين وفقط إذا كان المشرف،
ثم هذه العملية يمكن أن يؤديها على هذه النقطة النهاية.
لذا، هذه هي كل المهام المختلفة التي ستقوم بها كجزء من هذه المهمة.
يتم توثيق تفاصيل كيفية القيام بذلك في تعليمات التعيين.
لذلك، اقرأ التعليمات قبل المتابعة لإكمال المهمة الثالثة.
استمتعي بإتمام المهمة الثالثة