د ویب پته لارښود PHP + LDAP جوړول

دا داسې پیښ شوي چې یو (نسبتا) لوی کمپاین ډیری لیرې دفترونه درلودل چې د یو ښه شمیر کاروونکو سره. ټول دفترونه په یوه شبکه کې د ګډ ډومین سره وصل دي، هر دفتر په فعاله لارښود کې تعریف شوی (وروسته بیا د AD په نوم یادیږي) د سازمان واحد (OU) په توګه، په کوم کې چې کاروونکي لا دمخه جوړ شوي.

دا اړینه وه چې کاروونکو ته فرصت ورکړي چې په چټکۍ او اسانۍ سره د AD څخه د اړتیا وړ کارمند د اړیکو معلومات ترلاسه کړي، او د وړیا سیسټم مدیران د متن فایل ترمیم کولو معمول څخه چې د ادرس کتاب رول لوبوي.

د ستونزې د حل لپاره هیڅ چمتو شوي مناسب انتخابونه شتون نلري، نو ما باید هرڅه په خپلو لاسونو او سرونو سره ترسره کړي.

راځئ چې د دې حقیقت سره پیل وکړو چې لومړی تاسو اړتیا لرئ پریکړه وکړئ چې څه شی وکاروئ، دا ساده ده - وروستی لارښود باید د براوزر له لارې د ډومین ټولو کاروونکو ته شتون ولري. لومړی شی چې ذهن ته راځي د ldap سره په ګډه پی ایچ پی دی، او موږ به یې وکاروو. زه د PHP کارولو لویه ګټه د دې نسبي سادگي په توګه ګورم - د سیسټم هر مدیر حتی لږ پوهه به وکولی شي په کوډ کې اړین بدلونونه رامینځته کړي ، که اړتیا وي ، پرته له ځانګړي فشار څخه.

نو، راځئ چې پیل وکړو. لومړی، راځئ چې د ډومین سره د نښلولو لپاره پیرامیټونه تنظیم کړو:

$srv ="SERVER";
$srv_domain ="DOMAIN.COM";
$srv_login ="USERNAME@".$srv_domain; 
$srv_password ="PASSWORD";

بل ټکی د دې معلومول دي چې په کوم OU کې به موږ د کاروونکو لټون وکړو. موږ به دا د $_GET['place'] څخه د ارزښتونو په مینځلو سره ترسره کړو. د مثال په توګه، که چیرې کاروونکي پتې ته لاړ شي server/index.php?place=لومړی، بیا متغیر $ ځای یو ارزښت ټاکل کیږي لومړی.

$place = (@$_GET['place']);
$doscript=true;
switch($place){ 
case "first" :
	$dn ="OU=ou1,OU=DOMAIN,dc=DOMAIN,dc=COM";			
	break;
case "second":
	$dn ="OU=ou2,OU=DOMAIN,dc=DOMAIN,dc=COM";			
	break;
	//здесь можно добавить ещё условий.
default:
	$doscript=false; 
	break;
}
if (!$doscript) include "main_table.html";

متغیر $doscript د ارزښت ذخیره کولو لپاره اړین دی - ایا موږ OU تعریف کړی په کوم کې چې موږ به د کاروونکو لټون وکړو یا نه. که چیرې د "switch-case" کې لیست شوي میچونه شتون ونلري، نو $doscript=false، د سکریپټ اصلي برخه به اجرا نشي، او د پیل پاڼه "main_table.html" به ښکاره شي (زه به تاسو ته ووایم. دا په پای کې).

که موږ یو OU تعریف کړی وي، نو بیا موږ نورو کړنو ته دوام ورکوو: موږ د کارونکي لپاره د لارښود پاڼې رسمول پیل کوو:

else if ($doscript) {
{echo "
<!DOCTYPE html> 
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<link rel='shortcut icon' href='ico.png'>
<meta charset='windows-1251/ '>

موږ د ډیر خوندور ظهور لپاره سټایلونه شامل کړو (هو، دوی د سی ایس ایس فایل په توګه شامل کیدی شي، مګر د IE ځینې نسخې نه غواړي چې په دې ډول ترتیب شوي سټایلونه ومني، نو تاسو باید په مستقیم ډول په سکریپټ کې ولیکئ):

<style>
	*{text-align: center; font-family:tahoma; font-size:14px;}
	a{text-decoration: none; color: #000;}
	a:hover{text-decoration: underline; color: #0059FF;}
	#bold{text-decoration: none; font-weight: 600;font-size:20px;}
	#table,tr,td{border-style:solid;border-width:1px;	border-collapse:collapse;padding:5px; height:22px;border-color:#7d7d7d;}
	/* Нечетные строки */#table tbody tr:nth-child(odd){background: #fff;}
	/* Четные строки */   #table tbody tr:nth-child(even){background: #F7F7F7;}	
	#noborder{border-width: 0 px; border-style: none;}	
	#sp30px{text-indent: 30px;text-align: justify;}
	#smallsize{font-family:tahoma; text-indent: 5px; text-align:left; font-size:12px;}
	#top {background: #ffffff;
		text-align: center;
		left:0;
		top:0px;
		table-layout: fixed;
		border-style:solid;
		border-width:0px;
		border-collapse:collapse;
		padding:0px;
		height:22px;
		border: 0px;
		z-index: 99999;
		display:block;
		width:80px;
		opacity: 0.6;
		filter: alpha(Opacity=60);
		height:100%;
		position:fixed;}
	#top:hover{background: #afafaf;opacity: 100;filter: alpha(Opacity=100);text-decoration: none;color: #000000;}
	.smalltext{padding-top: 1px;
		padding-bottom: 1px;
		text-align: bottom;
		font-family:tahoma;
		color: #a0a0a0;
		line-height: 7px;
		font-size: 10px;}
	.smalltext:hover{color: #0000ff;}		
	.transition-rotate {position: relative;
		z-index: 2;
		margin: 0 auto;
		padding: 5px;
		text-align: center;
		max-width: 500px;
		cursor: pointer;
		transition: 0.1s linear;}
	.transition-rotate:hover {-webkit-transform: rotate(-2deg);	transform: rotate(-2deg);}
	#lineheight{
		text-align: left;
		line-height: 1px;
		text-decoration: none;
		font-weight: 600;
		font-size:20px;}
</style>

موږ د سټایلونو سره بشپړ شوي ، اوس موږ د ټب سرلیک لیکو او اصلي پا pageې ته د راستنیدو لپاره مناسب لینک رسم کوو:

<title>Adressbook of «YourMegaCompanyName»</title>	
</head>
<body style='background-color:#ffffff;'>";
}
echo "
<table id='top'><tr><td id='top'>
<a href='index.php?place=main' id='top' >
<br><br><br>
<img src='back_to_main.png' alt='' border='0' width='75' height='60'/>
<p>На главную</p></a>
</td></tr></table>
";

موږ د لټون فلټرونه د AD لخوا تعریف کوو او د OU په اړه معلومات ترلاسه کوو:

$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"; //все пользователи, кроме отключенных.
$filter2 ="(objectCategory=OrganizationalUnit)"; // для получения информации о OU
$ds=ldap_connect($srv);   
if ($ds) { 
    $r=ldap_bind($ds,$srv_login,$srv_password);;     
	ldap_set_option($ds,LDAP_OPT_REFERRALS, 0);
	ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
	$sr=ldap_search($ds,$dn ,$filter );   
    ldap_sort($ds,$sr, "givenname");
    $info = ldap_get_entries($ds, $sr); 
    $sr2=ldap_search($ds,$dn ,$filter2 );   
    $placeinfo = ldap_get_entries($ds, $sr2); 
$PlaceName = $placeinfo[0]["l"][0];  			// name of place
$PlaceAddres = $placeinfo[0]["street"][0];		// address of place
$PlaceMail = $placeinfo[0]["description"][0]; 	// mail of place
$PlacePhone = $placeinfo[0]["st"][0]; 		// phone of plase

بیا موږ د پاڼې پورتنۍ برخه ډیزاین کوو:

echo"<table align='center' height = '80'>
	<td id='noborder' ><div id='lineheight'>". $PlaceName ."</div></td></tr>
	<tr><td id='noborder' >". $PlaceAddres ."</td></tr>
    </table>
<table align='center' id='table'>
	<tr><td width='35' bgcolor = #f0f0e4>  № </td>
	<td width='300' bgcolor = #f0f0e4> Name </td>
	<td width='250' bgcolor = #f0f0e4> E-mail </td>
	<td width='60' bgcolor = #f0f0e4> Phone </td>
	<td width='150' bgcolor = #f0f0e4> Mobile </td></tr>
	<tr><td></td><td> Данные OU </td><td>";
echo "<div class='transition-rotate'><a href=mailto:" . $PlaceMail .">" . $PlaceMail ." </a></div>";
echo "</td><td width='150'> " . $PlacePhone ." </td><td> - </td></tr>";

بیا ، موږ د کارونکي ډیټا په لوپ کې ترلاسه کوو او پروسس کوو ، پداسې حال کې چې د ځینې (د مثال په توګه ، خدمت) حسابونو پټولو لپاره ، موږ په ساده ډول په AD کې د کارونکي توضیحاتو کې د "خونې" ډګر کې "پټ" دننه کوو ، داسې کارونکي به نه وي. په لارښود کې ښودل شوي:

for ($i=0; $i<$info["count"];$i++) { 
$UserHide = $info[$i]["physicaldeliveryofficename"][0];
if ($UserHide != 'hide') {
$UserName = $info[$i]["cn"][0];                //Имя пользователя
$UserPosition = $info[$i]["title"][0]; 		// Должность
$UserMail = $info[$i]["mail"][0];			//mail
if (!$UserMail)) $UserMail = "-";                  //если нет данных о ящике в AD, то отображаем прочерк
$UserIpPhone = $info[$i]["ipphone"][0];		//ip phone
	if (!$UserIpPhone) $UserIpPhone = "-";    //если нет данных о ящике в AD, то отображаем прочерк
$UserMobile = $info[$i]["mobile"][0];		//mobile
	if (!$UserMobile) $UserMobile = "-";     //если нет данных о ящике в AD, то отображаем прочерк

په هرصورت، که تاسو اړتیا لرئ د بل خاصیت ارزښت ترلاسه کړئ، نو په یاد ولرئ (دا مهم دی):
په غوښتنه کې موږ د خاصیت نوم پاس کوو کوچنی لیکونه، که نه نو دا به کار ونکړي.

او ترلاسه شوي معلومات په جدول کې دننه کړئ:

    echo "<tr>
	<td>". $n+=1 ."</td>
	<td> ". $UserName ."<br> <div class='smalltext'>". $UserPosition ."</div></td><td>"; //	Имя пользователя и должность 
	if ($UserMail !='-') echo "<div class='transition-rotate'><a href=mailto:'$UserMail'>$UserMail  </a></div>";    // если у пользователя есть e-mail создаём ссылку на отправку письма
	else echo "-"; //если нет e-mail - ставим прочерк.
 	echo "<td> ". $UserIpPhone ." </td>
 	<td> ". $UserMobile ." </td></tr>";
	}
}
echo "</table>";

بیا، موږ د ldap اتصال وتړو، یا د سرور سره د نښلولو د ناممکنیت په اړه یو پیغام ښکاره کوو:

ldap_close($ds); 
} 
else echo "<h4>Unable to connect to LDAP server</h4>"; 
echo '<br><br><br></body></html>';}

د دننه څخه د "main_table.html" فایل د لینکونو سره یو ساده html پاڼه ده، او داسې ښکاري:

<head>
<link rel="shortcut icon" href="ico.png"/>
<meta charset="windows-1251"/>
<title>Adressbook of «YourMegaCompanyName»</title>
</head>
<body style='background-color:#ffffff;'>
<center><a href=index.php><IMG border="none" src="logo.png"/></a></center>
<center><b>Places and offices</b></center>
<br>
<table border="0" width="450" bgcolor="#dddddd" align="center" valign="middle" CELLSPACING="0">

<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou1">OU1</a></td></tr>
<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou2">OU2</a></td></tr>

</table></body></html>

که زما کوډ د چا سره مرسته وکړي، زه به خوښ شم، دا وکاروئ!

تاسو کولی شئ دا په آزاده توګه ایډیټ کړئ لکه څنګه چې تاسو غواړئ (ښه یا بدتر) او په هره وسیله یې وویشئ.

ستاسو د پاملرنې مننه!

سرچینه: www.habr.com

Add a comment