2011-04-02 12 views
5

मेरे पास एक PHP साइट है जिसमें एकाधिक PHP स्क्रिप्ट हैं। मुझे उपयोगकर्ताओं को किसी अन्य साइट से सीमित सिस्टम तक पहुंच प्रदान करने की आवश्यकता है। मैं प्रतिबंधित करना चाहता हूं कि इन पीपीएल किस पेज तक पहुंच सकते हैं।सीमित पहुंच उपयोगकर्ताओं के लिए PHP स्क्रिप्ट तक पहुंच प्रतिबंधित करना

मैं निम्नलिखित तरीके से यह कर रहा हूं:

// $_SESSION['systemid'] is set with a value of say, '1' 
$permissionArray = $objACCESS->getPermissions($_SESSION['systemid']); 

// getPermissions returns an array like the following (for that systemid): 
// 0 => {'systemid' => '1', 'permission_type' => 'createcontent' } 
// 1 => {'systemid' => '1', 'permission_type' => 'invitecontacts' } 

// the following contain a list of script names that should be 
// restricted if permission is not allowed 
$createcontent = array('createcontent.php'); 
$managecontent = array('managecontent.php'); 
$invitecontacts = array('invitecontacts.php'); 

$page_name=basename($_SERVER["SCRIPT_FILENAME"]); 

if(is_array($permissionarray)) 
{ 
    $haspermissions = false; 
    foreach($permissionarray as $permissions) 
    { 
     if(in_array($page_name,${"$permissions[permission_type]"})) 
     { 
      $haspermissions = true; 
      break; 
     } 
    } 
} 

if($haspermissions==false) 
{ 
    // - do not have permissions 
    echo "<meta http-equiv=\"refresh\" content=\"0;url=".$site_url."404.php\">"; 
    die; 
} 

... 
// rest of the code 
... 

Q1: वहाँ उपयोगकर्ता एक्सेस को प्रतिबंधित करने का एक बेहतर तरीका है?

प्रश्न 2: यदि नहीं, तो इस विधि को अधिक कुशल/इष्टतम बनाने का कोई तरीका है?

+0

+1 अच्छा स्पष्ट प्रश्न। नोट हालांकि, जैसा दिखता है: http://stackoverflow.com/questions/1392428/restricting-access-to-a-site-using-ip-address – Smandoli

+0

"मुझे उपयोगकर्ताओं को किसी अन्य साइट सीमित पहुंच से प्रदान करने की आवश्यकता है" यह नहीं है स्पष्ट? "दूसरी साइट" के तहत आपका क्या मतलब है? वैसे भी +1! – Wh1T3h4Ck5

+0

आपकी टिप्पणी smandoli के लिए धन्यवाद - लेकिन मैं इस "बाहरी प्रणाली" उपयोगकर्ता को मेरी साइट पर घूमने से रोकने के लिए देख रहा हूं - और यह प्रतिबंध उस प्रणाली पर आधारित है जिस पर वह है, उसका आईपी पता/भूगोल – siliconpi

उत्तर

0

अंतर्निहित प्रमाणीकरण तंत्र यहां मुझे समझ में नहीं आता है। $ _SESSION ['systemid'] कैसे सेट है? एक "प्रणाली" क्या है?

वैसे भी, मुझे लगता है कि आपको समस्या का यह हिस्सा मिल गया है।

सबसे पहले, की तरह कुछ वापस जाने के लिए getPermissions समायोजित:

$perms = array(
    'createcontact' => 1, 
    'invitecontacts' => 1 
); 

यह सरणी केवल कि "प्रणाली" के साथ जुड़े अनुमति के साथ से भरे जाएंगे तदनुसार, मैं इस प्रकार है कि आप ऊपर डाल संपादित करनी होगी।

फिर, जाँच इस प्रकार है, जैसे वर्तमान "प्रणाली" एक पेज के लिए आवश्यक अनुमति नहीं है:

$cur_page_perm_key = basename($_SERVER['SCRIPT_FILENAME'], '.php'); 
$has_permission = isset($perms[$cur_page_perm_key]); 
if(!$has_permission) { 
    // No permission? Redirect to an unauthorized page 
    header('HTTP/1.0 401 Not Authorized'); 
    header('Status: 401 Not Authorized'); 
    header('Location: /unauthorized.php'); 
    exit; 
} 

सरल "isset" चेक बहुत तेजी से पाशन से किया जाएगा, खासकर अगर अनुमतियों की संख्या/पेज बढ़ता है।

उम्मीद है कि इससे मदद मिलती है।

+0

हम्म - मुझे लगता है कि यह बहुत अच्छा काम करेगा - धन्यवाद! – siliconpi

संबंधित मुद्दे