
22-12-2006, 18:31
|
 |
|
|
חבר מתאריך: 02.10.05
הודעות: 2,355
|
|
בנוסף לפיתרון שנתנו לך עם הטבלה, יש לי פיתרון הרבה יותר אלגנטי.
השאלה היא איך אתה רוצה לנהל את זה: למשתמש או לקבוצה.
אם לקבוצה, אתה מכין טבלה של קבוצות עם 3 עמודות:
ID, שם קבוצה, ו- power (אתה יכול להוסיף עוד כל מיני עמודות, כמה שבא לך)
עכשיו, ה- power הוא int, וזה תלוי בכמות הפירוט של ההשקעות, הרעיון של המערכת הרשאות הזאת היא לחסוך בעמודות, על חשבון יותר חישוב מתמטי.
קודם כל אנחנו צרכים מערך עם פרמטרים למשל:
קוד PHP:
$canDo = array ( 'read', 'write', 'admin_access', 'user_access', 'update', 'delete' );
על בסיס ההרשאות שהכנו פה אנחנו יכולים לקבוע כל מיני דברים, למשל, קבלה מ- post ערכים, והפיכתם ל- power:
מה אנחנו עושים פה?
אנחנו מקבלים מ- post את המידע, המידע מתקבל כ- 0=שקר, 1=אמת. עכשיו אנחנו מחברים את כל המידע שקיבלנו מ- post, למספר בינארי, חשוב מאוד לפי הסדר, כלומר, read יהיה ראשון ו- write יהיה שני.
למשל, המספר הבינארי של משתמש שיכול אך ורק לקרוא, לכתוב, ולקבל גישת משתמש יהיה:110100.
עכשיו אנחנו מכינים פונקציה שהופכת את המספר הבינארי הזה למספר רגיל, למה? המספר יכול להיות באופן מטריד ארוך מידי 
קוד PHP:
function toPower($power = 0) { return base_convert($power,2,10); }
אחרי שיש לנו power, אנחנו מכניסים את הנתון הזה למסד נתונים ועושים איתו מה שאנחנו רוצים, כל זה טוב ויפה.. אבל עכשיו אנחנו צריכים פונקציה שתהפוך את המספר הזה בחזרה למערך לא? אין בעיה, סבבה:
קוד PHP:
function getperms($userpower = 0) { global $canDo; $base_power = base_convert($userpower,10,2); $i =0; foreach ($canDo AS $key =>$val) { $user_premissions[$val] = (($base_power[$i] == 1) ? 1:0); $i++; } return $user_premissions; }
בהסתמכות על המערך, canDo, בתיקווה שלמספר הבינארים הכנסת את ה-1 ו- 0 לפי הסדר, הפונקציה הזאת מחזירה לכם מערך עם כל ההטבות, לפי השמות שיש במערך canDo עם ערך של-1 או 0.
מבוסס על המדריך הזה
_____________________________________
|