Ƙirƙirar adireshin adireshin WEB PHP + LDAP

Hakan ya faru cewa babban yaƙin neman zaɓe yana da ofisoshi masu nisa da yawa tare da adadin masu amfani. An haɗa dukkan ofisoshin zuwa cibiyar sadarwa guda ɗaya tare da yanki na gama gari, kowane ofishi an bayyana shi a cikin Active Directory (wanda ake kira AD) azaman Ƙungiyar Ƙungiya (OU), wanda aka riga aka ƙirƙiri masu amfani.

Ya zama dole a ba masu amfani damar da sauri da sauri samun bayanan tuntuɓar ma'aikacin da ake buƙata daga AD, da masu gudanar da tsarin kyauta daga yau da kullun na gyara fayil ɗin rubutu wanda ya taka rawar littafin adireshi.

Babu shirye-shiryen da suka dace don magance matsalar, don haka dole ne in yi komai da hannuna da kaina.

Bari mu fara da gaskiyar cewa da farko kuna buƙatar yanke shawarar abin da za ku yi amfani da shi, yana da sauƙi - jagorar ƙarshe ya kamata ya kasance ga duk masu amfani da yankin ta hanyar bincike. Abu na farko da ya zo a hankali shine PHP tare da ldap, kuma za mu yi amfani da su. Na yi la'akari da babban fa'idar amfani da PHP don zama sauƙi na dangi - duk wani mai kula da tsarin da ko da ɗan fahimta zai iya yin canje-canjen da suka dace ga lambar, idan ya cancanta, ba tare da damuwa ba.

Don haka, bari mu fara. Da farko, bari mu saita sigogi don haɗi zuwa yankin:

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

Batu na gaba shine sanin wanene OU zamu nemo masu amfani. Za mu yi hakan ta hanyar tsinke ƙima daga $_GET['wuri']. Misali, idan mai amfani ya je adireshin uwar garken/index.php?wuri =farko, sannan mai canzawa $wuri za a sanya darajar farko.

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

Mai canzawa $rubutun ana buƙatar don adana ƙimar - ko mun bayyana OU da za mu nemo masu amfani ko a'a. Idan babu matches da aka jera a cikin “switch-case”, to $doscript= ƙarya, ba za a aiwatar da babban ɓangaren rubutun ba, kuma za a nuna shafin farawa “main_table.html” (zan gaya muku game da shi). shi a karshen).

Idan mun ayyana OU, to, za mu ci gaba zuwa ƙarin ayyuka: za mu fara zana shafi ga mai amfani:

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/ '>

Mun haɗa da salo don mafi kyawun bayyanar (eh, ana iya haɗa su azaman fayil ɗin css, amma wasu nau'ikan IE ba sa son karɓar salon da aka saita ta wannan hanyar, don haka dole ne ku rubuta su kai tsaye cikin rubutun):

<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>

Mun gama da salon, yanzu mun rubuta taken shafin kuma zana hanyar haɗi mai dacewa don komawa babban shafi:

<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>
";

Muna ayyana matatun bincike ta AD kuma muna samun bayanai game da 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

Na gaba za mu tsara saman shafin:

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>";

Bayan haka, muna karɓa da sarrafa bayanan mai amfani a cikin madauki, yayin da don ɓoye wasu asusun (misali, sabis), kawai mu shigar da "ɓoye" a cikin filin "daki" a cikin bayanan mai amfani a AD, irin waɗannan masu amfani ba za su kasance ba. nunawa a cikin kundin adireshi:

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, то отображаем прочерк

Af, idan kuna buƙatar samun darajar wani sifa, to ku tuna (wannan yana da mahimmanci):
a cikin bukatar mu wuce sunan sifa ƙarami haruffa, in ba haka ba ba zai yi aiki ba.

Kuma saka bayanan da aka karɓa a cikin tebur:

    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>";

Bayan haka, muna rufe haɗin ldap, ko nuna saƙo game da rashin yiwuwar haɗawa da sabar:

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

Fayil ɗin "main_table.html" daga ciki shafi ne mai sauƙi na html tare da hanyoyin haɗi, kuma yana kama da wani abu kamar haka:

<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>

Idan lambara ta taimaka wa kowa, zan yi farin ciki, yi amfani da shi!

Hakanan zaka iya gyara shi kyauta yadda kake so (inganta/mafi muni) da rarraba ta kowace hanya.

Na gode da hankali!

source: www.habr.com

Add a comment