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

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 08-10-06, 07:18   # 1
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

[מדריך] PHP - איך לעשות מערכת הרשאות

תמיד רציתם לדעת איך לעשות מערכת הרשאות ? לפעילויות שונות במערכת ?

המדריך יוצא מתוך נקודת הנחה שיש לכם ידע בסיסי ב PHP (רצוי גם MYSQL)
ושיש לכם איזה שהיא מערכת שכוללת התחברות.

טוב אז ככה...
למה זה טוב ?
זה טוב למערכות שיש בהם הרבה משתמשים או קבוצות משתמשים ואתם רוצים שלכל קבוצה יהיה הרשאות שונות. לדוגמא : המשתמש יכול להעלות קבצים ? כן\לא המשתמש יכול לשנות עיצוב ? כן \ לא

עכשיו קודם כל נתחיל בהגדרה של האפשרויות שיכולות להיות אצלנו במערכת
לדוגמא :

PHP קוד:
$perms 
array(
'canread',
'canwrite',
'canadmin',
'canfuck',
'cansuckmydick',
); 
עכשיו אני לא יודע מי למד בתיכון (או לומד) אלקטרוניקה ומחשבים
אבל יש 2 מצבים בסייסים, 0 ו 1
עכשיו במערכת שלנו, 0 מסמן לא יכול לעשות את הפעולה המבוקשת, ו 1 מסמן יכול לעשות את הפעולה המבוקשת.

עכשיו פונקציות הבסיס של המערכת :

PHP קוד:
function toPower($power 0)
{
return     
base_convert($power,2,10);
}

function 
getperms($userpower 0)
{
    global 
$perms;
    
$base_power base_convert($userpower,10,2);
    
$i =0;
    foreach (
$perms AS $key =>$val)
    {
        
$user_premissions[$val] = (($base_power[$i] == 1) ? 1:0);
    
$i++;
    }
    return 
$user_premissions;

הפונקציצה הראשונה ממירה מספרי מבסיס בינארי ( 0 ו 1) לבסיס עשרוני (10)
כלומר כשאנחנו מוסיפים משתמש בפנאל ניהול, יהיה לנו לפי הסדר את הפעולות שמוגדרות במערך הראשוני
לדוגמא :
יכול לראות את המערכת ? כן \ לא
יכול לכתוב הודעות ? כן \ לא

כמובן שזה הולך לפי הסדר שהגדרנו בהתחלה
ככה שאחרי שאנחנו נעשה POST כלומר לשמור את המשתמש,
אנחנו נקבל את המידע ככה :
PHP קוד:
$_POST['canread'] = 1
אז אנחנו נקח את כל המשתנים ונחבר אותם ביחד
ובסוף יהיה לנו שורה לפי מה שבחרנו לדוגמא 10101 אבל אנחנו לא יכולים להשתמש בזה ככה
לכן אנחנו נמיר את זה למספר עשרוני עם הפונקציה שכתבו קודם כך :
PHP קוד:
$userpower topower(10101); 
ואז בתוך USERPOWER אנחנו נקבל את המספר 21
ונשמור את המספר הזה במסד...תחת השורה של אותו משתמש

עכשיו כשהמשתמש מתחבר אז אנחנו מן הסתם מושכים את הפרטים שלו מהמסד
לדוגמא :
PHP קוד:
$user $db->query_return("SELECT * FROM user WHERE userid='5'"); 
עכשיו בתוך USER יש לנו את כל הפרטים ובין השאר את power.

עכשיו אנחנו צריכים להמיר את זה להרשאות אז נשתמש בפונקציה השניה
ונעשה משהו כזה :
PHP קוד:
$user[permissions] = getperms($user[power]); 
עכשיו יש בתוך המשתנה user[permissions] את כל ההרשאות

וזה נראה בערך ככה :

PHP קוד:
Array
(
    [
canread] => 1
    
[canwrite] => 0
    
[canadmin] => 1
    
[canfuck] => 0
    
[cansuck] => 1

עכשיו כל מה שנותן זה להשתמש בהרשאות שקיבלנו עבור המשתמש :
לדוגמא
PHP קוד:

if (!$user[permission][canread])
{
echo 
"you dont have permission to view this page";
die();
}
//rest of code here 

וזה בערך הרעיון על רגל אחת.... מקווה שהבנתם ומי שלא אז תשאלו פה ואני אשתדל לעזור..

תהנו.
  Reply With Quote
ישן 08-10-06, 07:28   # 2
-VladK-
הוסטסניון
 
-VladK-'s Avatar
 
מיני פרופיל
תאריך הצטרפות: Apr 2006
גיל: 33
הודעות: 2,182

-VladK- לא מחובר  

אחלה מדריך...ממש מושקע...אני היתי עושה את זה בשיטה שונה אבל בכל מקרה...תודה...
  Reply With Quote
ישן 08-10-06, 07:42   # 3
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

ציטוט:
נכתב במקור על ידי Pilmen
אחלה מדריך...ממש מושקע...אני היתי עושה את זה בשיטה שונה אבל בכל מקרה...תודה...

באיזה שיטה ? שתף... עם ביטים לוגים ?

כתבתי את כל הסקריפט ב 10 דקות בערך... אז לא יצר משהו
  Reply With Quote
ישן 08-10-06, 07:47   # 4
-VladK-
הוסטסניון
 
-VladK-'s Avatar
 
מיני פרופיל
תאריך הצטרפות: Apr 2006
גיל: 33
הודעות: 2,182

-VladK- לא מחובר  

לא יודע אם שלי יעילה יותר אבל בטבלה של המשתמשים יש לי טור לכל אזור...נגיד המשתמש הגיעה לאזור X אני בודק אם יש לו גישה לשם בעזרת התחברות למסד ובדיקה מה הערך של השדה שלו...
  Reply With Quote
ישן 08-10-06, 07:52   # 5
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

לא יעיל בכלל...
אם יש לך 500 אזורים אז אתה מוסיף 500 שדות ובכל דף בודק מחדש ?
בכלל לא יעיל

השיטה שכתבתי פה הרבה יותר טובה כי במספר אחד אתה מכסה את הכל.

יש בה חיסרון אחד, צריך לשמור על הסדר שזה מופיע

ולכן עדיף להשתמש ב BITMASK שזה הרבה יותר טוב...
פשוט רציתי לכתוב משהו פשוט למשתמשים שלא כל כך מבינים....
  Reply With Quote
ישן 08-10-06, 08:28   # 6
Matchs
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: מרכז.
הודעות: 935

Matchs לא מחובר  

אחלה מדריך
תודה.
__________________
לפניות, אנא השאירו לי הודעה פרטית.
Matchs.
  Reply With Quote
השב

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

Tags
אבטחה, ניהול, מדריך למתקדמים, מדריך php


חוקי פירסום
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. הזמן כעת הוא 23:52.

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