![]() |
# 1 |
חבר פורום
|
מערכת הרשאות מעניינת שחשבתי עליה
טוב אז זו מערכת הרשאות מעניינת לדעתי שעלה לי הרעיון שלה מ FSO ב ASP, מערכת ההרשאות לקבצים.
שימו לב לטבלה בעמוד שם ומה שכתוב מתחת: http://www.webmaster.org.il/guide.as...fso&class=file מה שמעניין שהחיבור של מספרים שונים בחיים לא יניב תוצאה שווה, מה שמאפשר לנו לחבר ושהמחשב יידע מה ההרשאות שניתנו. עכשיו אני חשבתי, למה לא לקחת את המערכת הזאת ובמקום זה, לעשות את אותה המערכת למנהלים באתר מסויים, לכל אחד הרשאה משלו. אז נגיד: נגיד: 1= מסוגל לערוך הודעות 2= מסוגל לכתוב הודעות נעוצות 4= מסוגל למחוק הודעות 8= מסוגל להשעות משתמשים 16= מסוגל להוציא משתמשים להורג עכשיו נגיד ה מנהל יכול 1+2+8=11 זאת אומרת, שלמנהל יש הרשאות, לעריכת הודעות, לכתיבת הודעות ולהשעיית משתמשים. עכשיו אנחנו צריכים משהו שייקרא את זה, אני כמה ימים חשבתי על כל מיני דברים מסובכים, עד שאתמול הבנתי עד כמה זה פשוט וקליל. פשוט מאוד ניקח שוב את ההרשאה 11, נתחיל מההרשאה בעלת המספר הגבוה ביותר וכך נרד לראשונה בצורה כזאת: בודקים אם ההרשאה שניתנה גדולה מההרשאה שאנחנו בודקים, אם כן אז ההרשאה נכונה, מפחיתים את התוצאה עכשיו וממשיכים הלאה, אם לא, פשוט ממשיכים הלאה. זאת אומרת: נבדוק, האם 11 > 16 כמובן שלא, לכן נמשיך הלאה, 11>8 כן, נדע שהמנהל מסוגל להשעות משתמשים, עכשיו נפחית מ 11 8, נשאר 3 נבדוק עם 4, נקבל שלילי. נבדוק עם 2 יש, נדע שהמנהל מסוגל לנעוץ הודעות, נפחית 2 מ 3, נשאר לנו 1. נבדוק עם 1, נקבל חיובי. נדע שהוא מסוגל לערוך הודעות נפחית שוב כי אנחנו בלולאה. כמובן שיבואו כל מיני בדיקות ואם לא יישאר לנו 0 בסוף ההרשאה לא יכולה ליהיות קיימת אם בהתחלה ההרשאה היא 0, זה אומר שאין לו בכלל הרשאות וכל מיני כאלו. תוכנית קטנה שבניתי ב C ברבע שעה, הדגמה לקריאת הרשאות: קוד:
#include<stdio.h> #include<conio.h> /* premissions: 0=1 1=2 2=4 3=8 4=16 5=32 6=64 7=128 */ void main() { int i, userprem, prems[8], boolprems[8]; clrscr(); prems[0] = 1; userprem = 1 + 4 + 128 + 64; for(i=1; i<8; i++) { prems[i]=prems[i-1]*2; printf("%d, ", prems[i-1]); } printf("%d\n", prems[7]); /* for(i=0; i<8; i++) { boolprems[i] = 0; printf("%d, ", boolprems[i]); } */ printf("\n"); for(i=7; i>=0; i--) { if(userprem >= prems[i]) { // printf("%d\n", userprem); boolprems[i] = 1; userprem = userprem - prems[i]; printf("\n%d\n", userprem); } } for(i=0; i<8; i++) { if(boolprems[i] == 1) { printf("%d, ", prems[i]); } } getch(); } זהו, אם יש לי טעויות אתם מוזמנים לתקן אוחתי באלגוריתם, תודה, כל הבדיקות שם לא עשיתי אבל זסה עניין שולי. סתם רצילי לשתף. ערב טוב לכולם, איליה. |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
כלים לאשכול | |
תצורת הצגה | |
|
|