הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 16-11-06, 21:19   # 1
iliakap2002
חבר פורום
 
מיני פרופיל
תאריך הצטרפות: Jan 2006
הודעות: 122

iliakap2002 לא מחובר  

מערכת הרשאות מעניינת שחשבתי עליה

טוב אז זו מערכת הרשאות מעניינת לדעתי שעלה לי הרעיון שלה מ 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();
}
אל תשימו לב לבלאגן בקו, רבע שעה.
זהו, אם יש לי טעויות אתם מוזמנים לתקן אוחתי באלגוריתם, תודה, כל הבדיקות שם לא עשיתי אבל זסה עניין שולי.
סתם רצילי לשתף.

ערב טוב לכולם, איליה.
  Reply With Quote
ישן 17-11-06, 12:34   # 2
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

זה אותו רעיון של לעשות הרשאות לפי ביטים לוגים...אני משתמש בזה שנים...אם תרצה אני אסביר לך..
  Reply With Quote
ישן 17-11-06, 12:56   # 3
tnadav
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Oct 2006
הודעות: 216

tnadav לא מחובר  

ציטוט:
נכתב במקור על ידי RS324
זה אותו רעיון של לעשות הרשאות לפי ביטים לוגים...אני משתמש בזה שנים...אם תרצה אני אסביר לך..
בבקשה, תסביר, אשמח לשמוע
__________________
"אני לא מעצב גרפי... אני לא פלאשר תותח... בטח שלא מנכ"ל של חברת בניית אתרים, כעיקרון אסור לי להיות מועסק.. אבל אני... מתכנת ב-PHP , וגם, לא ממש מציעה.." (יצא לי מוזר משהו...חח)
  Reply With Quote
ישן 17-11-06, 19:47   # 4
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

טוב אז ככה :

ביטים לוגים זה אומר 2 מצבים בלבד (אם למדת אלקטרוניקה פעם)

פועל - דלוק - 1
לא פועל - מכובה 0.

עכשיו אנחנו מגדירים את הפעולות שאנחנו רוצים שיווצרו
שים לב שכל אחד חייב להיות פי 2 מהקודם לו
PHP קוד:
$bits = array();

$bits['generalpermissions'] = array(
'canview' =>1,
'canpost' =>2,
'canread' =>4,
'canadd' =>8,
'canfuck' =>16,
); 
עכשיו תבנה פונקציה שמחברת את המספרים לדוגמא
10101
יהיה במקרה שלנו 21 ואז ב USERPOWER יהיה לנו 21...
זה קצת יותר ארוך פשוט אין לי ממש כוח לעשות הסבר מפורט לזה....
  Reply With Quote
ישן 17-11-06, 21:04   # 5
iliakap2002
חבר פורום
 
מיני פרופיל
תאריך הצטרפות: Jan 2006
הודעות: 122

iliakap2002 לא מחובר  

אז מה זה שונה ממה שאני עשיתי?
  Reply With Quote
ישן 17-11-06, 21:46   # 6
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

ציטוט:
נכתב במקור על ידי iliakap2002
אז מה זה שונה ממה שאני עשיתי?
האמת לא קראתי כל כך את מה שאתה עשית...
ואם הייתי מסביר עד הסוף היית רואה שיש שוני
(אני לא מבין למה אתה צריך להשתמש בלולאות ??)

הרעיון בגדול הוא דומה...
  Reply With Quote
ישן 18-11-06, 00:18   # 7
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 35
הודעות: 564

Itay לא מחובר  

חח מה קרה RS324, שכחת שכבר רשמת על זה מדריך? http://www.hosts.co.il/forums/showthread.php?t=32405

רק לא הבנתי למה פה אמרת שהמזהה צריך להיות גדול פי 2 מהמזהה הקודם.. שיהיה
  Reply With Quote
ישן 18-11-06, 03:51   # 8
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

ציטוט:
נכתב במקור על ידי Itay
חח מה קרה RS324, שכחת שכבר רשמת על זה מדריך? http://www.hosts.co.il/forums/showthread.php?t=32405

רק לא הבנתי למה פה אמרת שהמזהה צריך להיות גדול פי 2 מהמזהה הקודם.. שיהיה
כי המדריך שרשמתי פה
הוא לא משתמש בביטים לוגים
  Reply With Quote
ישן 18-11-06, 09:08   # 9
iliakap2002
חבר פורום
 
מיני פרופיל
תאריך הצטרפות: Jan 2006
הודעות: 122

iliakap2002 לא מחובר  

האמת היא בכלל לא צריך לולאה, סתם עשיתי אותה כדי שתוכל לשנות לכמה הרשאות שאתה רוצה בלי שינויים משמעותיים בקוד...
  Reply With Quote
ישן 18-11-06, 15:59   # 10
SDF
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Sep 2006
מיקום: Negev
הודעות: 270

SDF לא מחובר  

יותר פשוט, bitwise operators.

יותר פשוט עם bitwise opertors
הנה דוגמא:

PHP קוד:
<?php
define 
('read'1);
define ('write'2);
define ('kick'4);
define ('ban'8);

function 
setflag (&$var$flag$set true)
{
 
// OR - settings flag
 // AND NOT - unsetting flag
   
$var $set ? ($var $flag) : ($var & ~$flag);
}


function 
isflagset (&$var$flag)
 {
   
$isflagset $var $flag;
 }


// init, read and write are on!
$myflags = (read write);

setflag($myflagsreadfalse); // unset read.
setflag($myflagskicktrue); //set kick.

isflagset($myflagsban); // return false.
isflagset($myflagskick); // return true.



?>
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 06:43.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ