|
הרשם | ![]() |
שאלות ותשובות | ![]() |
רשימת חברים | ![]() |
לוח שנה | ![]() |
הודעות מהיום | ![]() |
חיפוש | ![]() |
|
![]() |
![]() |
|
כלים לאשכול | תצורת הצגה |
![]() |
# 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(); } זהו, אם יש לי טעויות אתם מוזמנים לתקן אוחתי באלגוריתם, תודה, כל הבדיקות שם לא עשיתי אבל זסה עניין שולי. סתם רצילי לשתף. ערב טוב לכולם, איליה. |
![]() |
![]() |
# 2 |
תודה על תרומתך.
|
זה אותו רעיון של לעשות הרשאות לפי ביטים לוגים...אני משתמש בזה שנים...אם תרצה אני אסביר לך..
|
![]() |
![]() |
# 3 | |
חבר בקהילה
|
ציטוט:
![]()
__________________
"אני לא מעצב גרפי... אני לא פלאשר תותח... בטח שלא מנכ"ל של חברת בניית אתרים, כעיקרון אסור לי להיות מועסק.. אבל אני... מתכנת ב-PHP ![]() ![]() ![]() |
|
![]() |
![]() |
# 4 |
תודה על תרומתך.
|
טוב אז ככה :
ביטים לוגים זה אומר 2 מצבים בלבד (אם למדת אלקטרוניקה פעם) פועל - דלוק - 1 לא פועל - מכובה 0. עכשיו אנחנו מגדירים את הפעולות שאנחנו רוצים שיווצרו שים לב שכל אחד חייב להיות פי 2 מהקודם לו PHP קוד:
10101 יהיה במקרה שלנו 21 ואז ב USERPOWER יהיה לנו 21... זה קצת יותר ארוך פשוט אין לי ממש כוח לעשות הסבר מפורט לזה.... |
![]() |
![]() |
# 5 |
חבר פורום
|
אז מה זה שונה ממה שאני עשיתי?
|
![]() |
![]() |
# 6 | |
תודה על תרומתך.
|
ציטוט:
ואם הייתי מסביר עד הסוף היית רואה שיש שוני (אני לא מבין למה אתה צריך להשתמש בלולאות ??) הרעיון בגדול הוא דומה... |
|
![]() |
![]() |
# 7 |
חבר מתקדם
|
חח מה קרה RS324, שכחת שכבר רשמת על זה מדריך? http://www.hosts.co.il/forums/showthread.php?t=32405
רק לא הבנתי למה פה אמרת שהמזהה צריך להיות גדול פי 2 מהמזהה הקודם.. שיהיה |
![]() |
![]() |
# 8 | |
תודה על תרומתך.
|
ציטוט:
הוא לא משתמש בביטים לוגים ![]() |
|
![]() |
![]() |
# 9 |
חבר פורום
|
האמת היא בכלל לא צריך לולאה, סתם עשיתי אותה כדי שתוכל לשנות לכמה הרשאות שאתה רוצה בלי שינויים משמעותיים בקוד...
|
![]() |
![]() |
# 10 |
חבר בקהילה
|
יותר פשוט, bitwise operators.
יותר פשוט עם bitwise opertors
הנה דוגמא: PHP קוד:
|
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|