roles in asp

orengolan

New member
roles in asp

hey guy, sorry for writing in english. don't have hebrew here.. i have an asp application(that's asp, not asp.net) we have a few roles. each role have different permisions and can see different parts of the web pages. we need to add more roles to the system. do we need to actually change every page now and add spagety code inorder to allow different view and actions to each of our new roles or do i have a smarter sulotion? thanks!​
 

ייוניי

New member
אם הקוד הקיים הוא ספגטי

והדברים שתלויים ב Role מעורבבים עם דברים שלא תלויים (או כתובים כפול) אתה בצרות... תנסה לפרק את הבעיה לחלקים (חלקים מהאפליקציה) ולבדוק בכל מקום אם אפשר: א. לבודד קוד שתלוי ב Role ולהוציא אותו החוצה (לפונקציה נפרדת) ושם ליישם את ה Role-ים הנוספים. או ב. לבודד קוד שאיננו תלוי ב Role ולעטוף אותו במעטפת שונה עבור כל Role. (אולי משחקים של Server.Execute או Response.Redirect יעזרו...) בכל אופן כדאי לך לנסות לשלב קוד ג'נרי יותר (מאחר ואתה יודע שבעתיד יכולים להתווסף role-ים נוספים) אם במודל רלציוני (טבלת role-ים ונגררות שמכילים מידע לגבי תצוגה ופעולות של ה role) ואם במודל OO (כן, אפשר גם ב ASP למרות שהוא לא ממש מיועד לכך).
 

orengolan

New member
thanks

about the generic solution: can i implement both the relational and the OO solution or do i need to choose one? can u specify the idea and the basic behaviour and classes of the OO solution? thanks again​
 

ייוניי

New member
בבקשה

ברור שאפשר את שניהם אבל הם לא תמיד משתלבים טוב - פתרונות רלציונים בד"כ מונעים על ידי מודל מידע שאתה שולף ממנו רלציות ורץ עליהן וכך מיישם את האלגוריתם שלך לעומת פתרונות OO שבהם אובייקטים עושים את העבודה וה"מידע" מפוזר ומוסתר בתוכם. לצורך העניין אני מניח שבפתרון רלציוני כל role ייוצג כרשומה בעוד שבפתרון OO סביר ש role יהיה רק ממשק וייושם על ידי מחלקות שונות (או מופעים שונים). בקיצור, זה שונה אבל ברור שאפשר לשלב. לגבי היישום של OO ב asp זה קצת מוזר אבל המנוע של ASP מבוסס על COM ולכן תומך בקומפוננטות בעלות מצב (state). תחבר את זה עם העובדה ש JS ו- VBS לא משתמשות בטיפוסים (untyped) וקיבלת שכל הקריאות למתודות הן מראש וירטואליות ולמעשה מותר לך להפעיל את מתודה X על כל אובייקט ופשוט תקבל שגיאת ריצה אם הוא לא תומך במתודה. אז בין אם אתה משתמש ב JS או ב VBS תמצא את הדרך ליצור רכיבים ב Script (ב JS צריך להשתמש ב this וב VBS משתמשים בהגדרת Class אם אינני טועה) ותחשוף מהם מתודות מתאימות לממשק role (שכמובן קיים רק בתאוריה) שדפים שונים יקראו להן. אני מניח שאת האובייקט תרצה ליצור בשלב ה login ולשמור אותו ב Session אבל זה לא חובה.
 

עידו פ

New member
בנוסף למה שנאמר

אתה יכול לבדוק גם אפשרות לשלב במסגרת הבדיקה גם כלים של ניהול הרשאות. אם לדוגמה אתה עובד על שרת IIS תחת וינדוס, תוכל לנצל את אפשרויות ניהול ה-active directory הכולל בתוכו אפשרות לשיוך יוזרים ל-Roles (בחלק מהמקומות מיושם כ-group). אם מדובר במ"ה כגון לינוקס, אני מניח שיש מנגנונים דומים גם שם (רק אני לא מכיר אותם). אבל חשוב לזכור שמנגנוני Role based security חייבים גם איזשהו קישור הגדרתי בין מסך לבין Role. עכשיו, כפי שנאמר - במידה וריבוי ה-Roles הפתאומי אמור להשפיע גם על מסכים קיימים וקיימת אפשרות של הרחבה עתידית, כדאי לחשוב על איזשהו מנגנון נוסף לניהול הקשר בין Role לבין מסך. ולגבי דרכי יישום - מאחר והקשר בין מסכים לבין תפקידים (roles) הוא גלובלי לכל המערכת ואינו משתנה לעתים תכופות, ניתן לעבוד במסגרת OO ולשמור את הנתונים זמינים, in-memory ברמת האפליקציה (application cache) - בכל מקרה אחר הייתי מעדיף שלא לעבוד OO בשל הצורך בטעינת המידע כל הזמן מה-persistance שכנראה ימומש ב-DB לזכרון (סתם לוקח זמן מיותר). אפשרות נוספת היא עבודה פשוטה עם קובץ הגדרות - במקום לשמור ל-DB, לשלוף את פרטי ההרשאות וכו', אפשר פשוט לעבוד עם קובץ XML (סכמה שתכיל רשימת מסכים ולכל מסך את רשימת התפקידים ורמת ההרשאה שלהם) ובאמצעות JS/VB לתשאל את ה-XML לגבי התפקידים הנחוצים ואז לשאל את מנגנון היוזרים (נניח ADSI) האם היוזר קשור לאחד ה-ROLE-ים הנחוצים
 
למעלה