<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>República I.T. &#187; permisos</title>
	<atom:link href="http://www.republicait.com/tags/permisos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.republicait.com</link>
	<description>Progamación, Tecnología y mucho más...</description>
	<lastBuildDate>Thu, 20 May 2010 20:22:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Asignación de Permisos con Operadores Binarios</title>
		<link>http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/</link>
		<comments>http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 04:50:38 +0000</pubDate>
		<dc:creator>dcamargo.n</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[operadores binarios]]></category>
		<category><![CDATA[permisos]]></category>

		<guid isPermaLink="false">http://www.republicait.com/?p=312</guid>
		<description><![CDATA[En este post veremos como utilizar operaciones binarias para la asignación de permisos y la verificación de los mismos. Ejemplo escrito en PHP]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>En este post veremos como utilizar operaciones binarias para la asignación de permisos y la verificación de los mismos.</p>
<h3>Un Poco de Historia</h3>
<h4>Números Binarios</h4>
<p>Las operaciones realizadas por una computadora son hechas a base de los bit 1 y 0, cada número decimal puede ser representado en su respectivo número binario.<br />
Asi por ejemplo vemos la siguiente tabla, la cual usaremos para trabajar con los permisos:</p>
<table>
<tbody>
<tr>
<td></td>
<td>2<sup>4</sup></td>
<td>2<sup>3</sup></td>
<td>2<sup>2</sup></td>
<td>2<sup>1</sup></td>
<td>2<sup>0</sup></td>
</tr>
<tr>
<td>2</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>0</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>8</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>16</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
<h4>Operadores Binarios</h4>
<ul>
<li><strong>Operador lógico AND (&amp;):</strong>El operador lógico AND compara si dos bits estan encendidos, osea si su valor es 1, si ambos bits estan encendidos el resultado sera 1, en caso contrario, el resultado sera 0.</li>
<li><strong>Operador lógico OR (|):</strong>El operador lógico OR compara si alguno de los bits se encuentran encedidos, si algunos de los bits esta encendido retorna 1, a diferencia del AND, el OR solo retorna 0 cuando ambos bits se encuentran apagados.</li>
<li><strong>Operador lógico NOT (~):</strong>El operador lógico NOT convierte el valor del bit actual a su valor opuesto, osea de 1 lo coloca en 0 y viceversa.</li>
</ul>
<h4>Tabla de la Verdad</h4>
<p>Sean A y B dos bits con el valor de 1 y 0 respectivamente, las tablas de verdad para los operadores lógicos serian las siguientes:<br />
<em>A=1, B=0</em></p>
<table>
<tbody>
<tr>
<td>
<table>
<tbody>
<tr>
<td>AND (&amp;)</td>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>A</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>B</td>
<td>0</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
<td>
<table>
<tbody>
<tr>
<td>OR (|)</td>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>A</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>B</td>
<td>1</td>
<td>0</td>
</tr>
</tbody>
</table>
</td>
<td>
<table>
<tbody>
<tr>
<td></td>
<td></td>
<td>NOT (~)</td>
</tr>
<tr>
<td>A</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>B</td>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h3>Los valores TRUE y FALSE en PHP</h3>
<p>En PHP la evulacion de que alguna condicion sea cierta o falsa es un poco complicada, técnicamente hablando, en PHP cualquiera expresion es cierta (TRUE) si el resultado final es <strong>DISTINTO</strong> de los siguientes valores:</p>
<ul>
<li>false</li>
<li>0 (cero entero)</li>
<li>0.0 (cero flotante)</li>
<li>La cadena &#8220;0&#8243;</li>
<li>Una cadena vacía</li>
<li>Un arreglo con cero elementos</li>
<li>NULL</li>
</ul>
<p>Para una mayor referencia, visita la documentación de PHP en linea</p>
<ul>
<li><a href="http://www.php.net/manual/en/language.types.boolean.php" target="_blank">PHP Booleans</a></li>
<li><a href="http://www.php.net/manual/en/types.comparisons.php" target="_blank">PHP type comparisions</a></li>
</ul>
<h3>Permisos y Operadores Binarios</h3>
<p>En base a los puntos previos de los operadores binarios y como PHP evalua los valores TRUE y FALSE, vamos a demostrar como se pueden asignar permisos de escritura (WRITE), edición (EDIT) y de eliminar (DELETE).</p>
<h4>Script PHP</h4>
<pre class="brush:php">&lt;?php
/**
* Asignacion de permisos utilizando operadores binarios
* WRITE		= 2 (0010 en binario)
* EDIT		= 4 (0100 en binario)
* DELETE	= 8 (1000 en binario)
*/
define('WRITE',	2);
define('EDIT',	4);
define('DELETE',8);

//Asignamos los permisos de WRITE y EDIT a la variable $perm
$perm = WRITE | EDIT; //el valor asignado es 0110 (operador or)

//Verificamos cada permiso
if($perm &amp; WRITE){ // 0110 &amp; 0010 = 0010
echo 'WRITE asignado&lt;br /&gt;';
}
if($perm &amp; EDIT){ // 0110 &amp; 0100 = 0100
echo 'EDIT asignado&lt;br /&gt;';
}
if($perm &amp; DELETE){ //0110 &amp; 1000 = 0000
echo 'DELETE asignado&lt;br /&gt;';
}

//Ahora verificamos la negacion de los permisos
//  $perm = 0110, ~$perm = 1001

if(~$perm &amp; WRITE){ // 1001 &amp; 0010 = 0000
echo 'WRITE no esta asignado&lt;br /&gt;';
}
if(~$perm &amp; EDIT){ // 1001 &amp; 0100 = 0000
echo 'EDIT no esta asignado&lt;br /&gt;';
}
if(~$perm &amp; DELETE){ // 1001 &amp; 1000 = 1000
echo 'DELETE no esta asignado&lt;br /&gt;';
}
?&gt;</pre>
<p>Resultado al ejecutar el script:<br />
<code><br />
WRITE asignado<br />
EDIT asignado<br />
DELETE no esta asignado<br />
</code></p>
<blockquote><p>Nota: En PHP se hace facil este uso dado que la cadena &#8220;0000&#8243; al final es evaluada a false, mientras que en las otras cadenas seran evaluadas a true dado que tiene al menos un valor que la hace distinto de cero.</p></blockquote>
Términos de búsqueda<ul><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="asignacion de permisos">asignacion de permisos</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="Asignación con AND binario &=">Asignación con AND binario &=</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="operadores logico y sus respetiva tablas">operadores logico y sus respetiva tablas</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="operadores logicos BINARio">operadores logicos BINARio</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="pantalla asignaion permisos">pantalla asignaion permisos</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="Pantalla para asignación de permisos">Pantalla para asignación de permisos</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos bcon binarios en php">permisos bcon binarios en php</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos en binario">permisos en binario</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos en binario ejemplo">permisos en binario ejemplo</a></li><li><a href="http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/" title="permisos PHP binario">permisos PHP binario</a></li></ul><!-- SEO SearchTerms Tagging 2 plugin took 21.28 ms -->]]></content:encoded>
			<wfw:commentRss>http://www.republicait.com/2010/01/09/asignacion-de-permisos-con-operadores-binarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
