2011-04-02 14 views
5

Birden çok php betiğine sahip bir php sitem var. Kullanıcıları sistemime başka bir siteden sınırlı erişim sağlamak zorundayım. Bu ppl'nin erişebileceği sayfaları kısıtlamak istiyorum.Sınırlı erişim kullanıcıları için php komut dosyalarına erişimi kısıtlama

aşağıdaki şekilde yapıyorum:

// $_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 
... 

S1: kullanıcı erişimi kısıtlama daha iyi bir yolu var mı?

S2: Değilse, bu yöntemi daha verimli/en iyi hale getirmenin bir yolu var mı?

+0

+1 iyi anlaşılır bir soru. Bununla birlikte, aşağıdakilere benzer: Not: http://stackoverflow.com/questions/1392428/restricting-access-to-a-site-using-ip-address – Smandoli

+0

"Kullanıcıları başka bir siteye sınırlı erişimden sağlamanız gerekir." açık? "Başka bir site" nin altında ne demek istiyorsun? Yine de +1! – Wh1T3h4Ck5

+0

Yorumunuz için teşekkür ederiz smandoli - ama bu "harici sistem" kullanıcısını sitemde dolaşmayı kısıtlamak istiyorum - ve bu kısıtlama hangi sisteme bağlı olduğunu, kendi IP adresine/coğrafyaya değil – siliconpi

cevap

0

Buradaki temel kimlik doğrulama mekanizması benim için mantıklı değil. $ _SESSION ['systemid'] nasıl ayarlanır? Bir "sistem" nedir?

Her neyse, ben sorunun çözülmüş bu kısmı var olduğunu varsayalım.

Öncelikle, böyle bir şey dönmek için getPermissions ayarlamak:

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

Bu dizi sadece "sistem" ile ilişkili izinler ile doldurulur olacağını Buna göre, ben aşağıdaki gibi yukarıdaki ne koymak düzenlemek istiyorum. şöyle geçerli "sistem" bir sayfa için gerekli izni varsa

Sonra kontrol edin:

$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; 
} 

basit "isset" onay çok daha hızlı döngü daha olacaktır, özellikle de eğer izinleri sayısı/sayfalar büyür.

Umarım bu yardımcı olur.

+0

hmm - bence çok iyi çalışıyor - teşekkürler! – siliconpi

İlgili konular