
Authorize שבודק אם המשתמש מחובר, ואם לא, לא מאשרים את הפעולה. מוסיפים אותו לשתי פעולות Create של מוצרים, כך שמשתמש לא מחובר לא יוכל ליצור מוצר ואף לשלוח בקשת POST.system.web מגדירים authentication עם mode="Forms".loginUrl לדף הלוגין, בקונטרולר Account ובפעולה Login, ו-defaultUrl לדף שאליו מנותבים אחרי התחברות מוצלחת, כאן דף המוצרים Index.הטקסט המלא של הדקות הראשונות בהרצאה «אבטחה - MVC Security - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו הולכים לעשות זה למנוע גישה לדפים לא מורשים. אז בואו ניגש לאתר שלנו, ניגש לקונטרולר פרודקטס ויש לנו כאן מספר פונקציות.
בואו נניח שפונקציית אינדקס שמראה את כל המוצרים אנחנו רוצים לכל אחד לאפשר להיכנס ולצפות בה. כנ"ל פונקציית details.
אבל ברגע שמדובר ב-create בכדי ליצור מוצר חדש אנחנו מעוניינים שהבן אדם יירשם לאתר. אז מה אנחנו צריכים לעשות? אז mvc מספקת לנו פילטר שנקרא authorize הפילטר הזה בודק האם בן אדם כבר קיים במערכת כבן אדם שנרשם, ואם לא, היא לא מאשרת להיכנס לאקשן.
בואו ניקח את הפילטר הזה, נשכפל אותו לשתי פונקציות הקריאייט שיש לנו, כך שהבן אדם לא יוכל להיכנס לא לקריאייט הזאת ולא לקריאייט הזאת.
כלומר, גם הוא לא מצליח להיכנס אם הוא רוצה להוסיף מוצר חדש ולראות את דף המוצרים, ובטח שלא לבצע ריקווסט לשרת בצורה כלשהי ולהיכנס בריקווסט של פוסט, פשוט לתת לנו איזשהו מוצר בלי שהוא נרשם במערכת אז בואו כרגע נבדוק את האתר ננסה להוסיף מוצר כרגע לא טיפלנו במצב של איך הבן אדם
יכול בכלל להירשם אבל בואו נבדוק את זה עד כאן נריץ את האתר נבצע create new product ואנחנו מיד מנותבים לדף ש-aif מחזירה לנו והדף הזה זה unauthorized כלומר error 401 unauthorized אין לנו אישור בכלל להיכנס לדף הזה אבל רגע אנחנו לא רוצים שהלקוח יראה את הדבר הזה, אנחנו רוצים לנתב אותו לאיזשהו דף לוגים.
אז מה הדברים שאנחנו צריכים לעשות? אז בואו נסגור. אנחנו צריכים לגשת ל-Web Config, ואנחנו צריכים לגשת לתגית System.Web שנמצאת בתוך תגית השורש Configuration.
דבר ראשון, אנחנו צריכים להגדיר שאנחנו עובדים במוד Security שנקרא Forms Based Authentication. זה מתבצע על ידי הגדרת Authentication, תגית Authentication.
יש לה mode שווה forms בתוכה אנחנו מגדירים תגית forms מגדירים login url מיהו דף הלוגאים שלנו שכמובן צריך להיות לנו דף כזה. בואו נניח שהוא נמצא בתיקייה הראשית של האתר בתוך קונטרולר שנקרא אקאונט שאנחנו צריכים לבנות ואקשן שנקראת לוג אין.
ובואו נגדיר גם default url מה זה default url במידה והמשתמש גלש ישירות לדף לוגין, כלומר הוא רשם קודם כל בכותרת של הדפדפן, ב-URL של הדפדפן, שהוא מעוניין לגלוש ללוגין.
הוא כמובן יקבל את דף לוגין, יכניס יוברנם ופסוורד, ואז אנחנו צריכים לדעת לאן לנתב אותו במידה והוא הצליח. זה בדיוק יהיה default URL. אז בואו נניח שאנחנו רוצים לנתב אותו לדף הראשי בפרויקט שלנו, שזה קונטרולר שנקרא פרודקטס ופונקציה שנקראת אינדקס.
אחרי שהגדרנו את הדבר הזה אנחנו יכולים לגלוש עוד פעם לאתר, לנסות להיכנס לדף ה-create וכרגע אנחנו רואים משהו אחר.
אנחנו רואים איזושהי הודעה ש-your page doesn't exist, שזה נכון, אין לנו כרגע דף לוגין. אז כל מה שאנחנו צריכים לעשות זה ליצור את הקונטרולר המתאים שנקרא אקאונט ובתוכו אקשן שנקראת לוגין שמספקת איזשהו view למשתמש.
אוקיי, בואו נבדוק את זה. ניגש לקונטרולרס, נוסיף קונטרולר שנקרא אקאונט קונטרולר, נגדיר בתוכו אקשן לוגין ונייצר עבור הלוגין view.
כעת נגלוש שוב פעם, ננסה להוסיף מוצר ואנחנו רואים שאנחנו מיטבים לדף לוגין. מה אנחנו צריכים לעשות בדף לוגין?
אנחנו צריכים לאפשר למשתמש להכניס username ו-password ולאפשר להיכנס לאתר. יכול להיות שכדאי לנו גם לאפשר לו איזשהו צ'קבוקס של Remember Me, כך שאם בעתיד הוא מנסה להיכנס לאותו אתר והוא החליט לזכור אותו, אנחנו רוצים שהוא לא יצטרך להכניס עוד פעם
יוזרים ופסוורד, אלא לזכור את היוזרים הישנים. אז בואו נראה איך זה מתבצע. הדבר הראשון שאנחנו צריכים לעשות זה לאפשר דרך ה-Business Logic הוספה של בן אדם חדש לדאטאבייס.
כמו כן צריכים לאפשר בביזנס לוג'יק בדיקה האם בן אדם קיים. אז בואו ניגש לביזנס לוג'יק, נוסיף מחלקה עבור לוגין, לוג'יק נגדיר אותה כפאבליק, נירש את בייס לוג'יק בכדי שתהיה לנו גישה לדאטאבייס ונבנה פה את הפונקציות הדרושות לכל המערכת הלוגין.
דבר ראשון בואו נבנה פונקציה שבודקת האם משתמש קיים כן או לא, כי אם אנחנו רוצים לעשות רג'יסטר אנחנו נצטרך להבין קודם אם הבן אדם קיים.
תשנו public בוליאן is exist תקבל string username תחזיר לנו db.logins.any עבור לוגין אנחנו רוצים לבדוק שהיוזרניים שווה ליוזרניים שהתקבל.
פונקציה נוספת תיקרא is exist עבור username ו-password כאן אנחנו נשתמש איתה כאשר הבן אדם ירצה לבצע לוגין ודרכה אנחנו נבדוק האם אם הוא קיים, כן או לא.
אז פה אנחנו רוצים לבדוק האם היוזרנם שווה ליוזרנם וגם הפסוורד שווה לפסוורד. פונקציה נוספת שאנחנו צריכים תהיה רג'יסטר. היא תקבל יוזרנם, תקבל פסוורד והיא תוכל לקבל כל דבר אחר שאנחנו רוצים בשביל לבצע רג'יסטר כמו שם פרטי, שם משפחה, אימייל וכו'.
כרגע אנחנו מתעסקים רק עם יוזרנם ופסוורד לצורך הדוגמה הזאת. מה אנחנו צריכים לעשות? אנחנו צריכים לבנות אובייקט לוגין, להגדיר לו username, להגדיר לו פסוורד, לגשת ל-db.logins.ad ולצרף אותו.
לאחר מכן save changes.