acls.ctp 10.4 KB
<?php

use App\Controller\MaterielsController;
use App\Controller\SuivisController;
use App\Controller\EmpruntsController;
use App\Controller\DocumentsController;
use App\Controller\UsersController;
use App\Controller\ConfigurationsController;
use App\Controller\FournisseursController;
use App\Controller\PagesController;
use App\Controller\SurCategoriesController;
use App\Controller\FichemetrologiquesController;
use App\Controller\FormulesController;
use App\Controller\QrCodesController;
use App\Controller\TypeDocumentsController;


// Variables passées à la vue par le controleur
$lab_name = $lab_name;



//$controllers = ['Materiels'];
//$controllers = ['Materiels', 'Suivis'];
$controllers = [
    new MaterielsController(),
    new SuivisController(),
    new EmpruntsController(),
    new DocumentsController(),
    new PagesController(),
    new FournisseursController(),
    new SurCategoriesController(),
    new ConfigurationsController(),
    new UsersController(),
    new FichemetrologiquesController(),
    new FormulesController(),
    new QrCodesController(),
    new TypeDocumentsController(),
    
    // TODO:
    //new UsersController(),
    // ...
];


function displayAuthorizationsForController($c, $lab_name) {
    
    ?>

    <a id="<?=$c->name?>">
    <u><b>Autorisations pour les <?=$c->name?> :</b></u>
    </a>
    <br><br>
    
    Pour changer ces autorisations, ouvrir le fichier /src/Controller/<?=$c->name?>Controller.php :
    <ul>
    <li>
    	modifier les règles (LOCALES) dans la fonction setAuthorizations_<?=$lab_name?>() => elles ne s'appliqueront qu'à CE laboratoire
    </li>
    <li>
    	modifier les règles (GÉNÉRALES) dans la fonction setAuthorizations() => elles s'appliqueront à TOUS les laboratoires
    </li>
    </ul>
    <i>
    Veuillez ensuite partager ces modifications en les intégrant au code source général du logiciel (ainsi que toute autre modification effectuée) 
    via la commande "./PUSH_MODIFS"
    </i>
    <p>
    

	<!-- 
	<table border=1>
    -->
	<table>
		<thead>
		<tr>
			<th></th>
			<th colspan="10">CONDITIONS D'ACCÈS <br>(Statut et Appartenance du matériel)</th>
			<!-- 
			<th colspan="2">Condition d'accès<br>(Statut &amp; Appartenance<br>du matériel)</th>
			<th colspan="2">Condition d'accès<br>(Statut &amp; Appartenance<br>du matériel)</th>
			<th colspan="2">Condition d'accès<br>(Statut &amp; Appartenance<br>du matériel)</th>
			<th colspan="2">Condition d'accès<br>(Statut &amp; Appartenance<br>du matériel)</th>
			 -->
		</tr>
		<tr>
			<th scope="col">ACTION</th>
			<th scope="col" colspan="2">GÉNÉRAL<br>(règles par défaut)</th>
			<th scope="col" colspan="2">Utilisateur<br>(profil)</th>
			<th scope="col" colspan="2">Responsable<br>(profil)</th>
			<th scope="col" colspan="2">Administratif<br>(profil Gestionnaire)</th>
			<th scope="col" colspan="2">Super Administrateur<br>(profil)</th>
		</tr>
		</thead>
		
		<tbody>
		<?php
		$authorizations = $c->getAuthorizations();
		foreach (array_keys($authorizations) as $action) {
		?>
			<!--  Autorisations pour chaque action ($action) -->
    		<tr>

    			<?php
    			$authorizationsForCurrentAction = $authorizations[$action];
    			$alias = $authorizationsForCurrentAction['alias'];
    			if ($alias) $action.=" ($alias)";
    			?>
    			<th class="action" scope="row"><?=$action?></th>
    			<?php
    			foreach (array_keys($authorizationsForCurrentAction) as $role) {
    			    // Autorisations pour chaque role ($role)

    			    // On zappe l'alias
    			    if ($role == 'alias') continue;
    			    // On zappe le role "admin plus"
    			    //if ($role == 'adminp') continue;
    			    $authorizationsForCurrentActionAndRole = $authorizationsForCurrentAction[$role];
    			    if (! is_array($authorizationsForCurrentActionAndRole)) {
    			        $color='black';
    			        if ($authorizationsForCurrentActionAndRole === 'default' || $authorizationsForCurrentActionAndRole === 0) {
    			            //$authorizationsForCurrentActionAndRole = 'règle générale';
    			            $authorizationsForCurrentActionAndRole = 'aucune';
    			            $color='green';
    			        }
    			        elseif ($authorizationsForCurrentActionAndRole === -1) {
    			            $authorizationsForCurrentActionAndRole = 'interdit';
    			            $color='red';
    			        }
			        ?>
    			        <td colspan="2" style="color:<?=$color?>"><?=$authorizationsForCurrentActionAndRole?></td>
	    			<?php
    			    }
    			    else {
    			        
    			        // 1) Condition sur le STATUT
    			        $condition_status = $authorizationsForCurrentActionAndRole[0];
    			        $color1='red';
    			        if ($condition_status === 0) {
    			            $condition_status = 'aucune';
    			            $color1='green';
    			        }
    			        
    			        // 2) Condition sur l'APPARTENANCE
    			        $condition_belonging = $authorizationsForCurrentActionAndRole[1];
    			        $condition_belonging = $condition_belonging===0 ? 'N' : 'O';
    			        $color2 = $condition_belonging==='N' ? 'green' : 'red';
			        ?>
            			<td style="color:<?=$color1?>"><?=$condition_status?></td> 
            			<td style="color:<?=$color2?>"><?=$condition_belonging?></td> 
	    			<?php
    			    }
    			}
    			?>
    		</tr>
			<!--  Autorisations pour l'action $a -->

		<?php 
		}
		?>
		</tbody>

	</table>
	
<?php	
} // displayAuthorizationsForController
?>


<style>
table {
    /* 
    border-collapse: separate; 
    border: 1mm ridge grey;
    */
    border: 1mm ridge grey;
}
td, th {
    border: 1px solid #000;
    /*
    padding: 5px;
    */
}
th {
    text-align: center;
}
th.action {
    text-align: left;
}
</style>


	<h2>
		<!-- 
		<i class="icon-print"></i> 
		 -->
		<center>
			AUTORISATIONS DES UTILISATEURS<p> 
			(droits en fonction des profils)
		</center>
	</h2>
	
	
	<p>
	<center><b>Cette page montre Qui a le droit de faire QUOI</b></center>
	</p>

	<p>
    	Les tableaux ci-dessous sont générés dynamiquement en fonction des autorisations actuelles.
    	Ils sont donc totalement à jour et reflètent la réalité de l'expérience sur le site.
    </p>

	<!-- 
	<br />
	<br />
	<h3>AUTORISATIONS DES UTILISATEURS (PROFILS)</h3>
	 -->

	<br />
	<p>
		<!--  ancien lien WIKI 
		<a href="https://projects.irap.omp.eu/projects/inventirap/wiki/Installation#I-Etiquettes-optionnel">
		-->
		<!--  new lien GDOC -->
		=> <a href="https://docs.google.com/document/d/1-OhEeoi96j6ueUl5NQCQ9ZsTfbJTFw3ZVaWU2iYly_o/edit?pli=1#heading=h.pbi6v230ewtk">
			Lien vers le chapitre sur les Autorisations dans la documentation technique
		</a>
	</p>
    <hr />
    

	<u><b>Tableaux des conditions d'accès pour chaque entité</b></u>
	<br><br>
	<?php 
	echo '<u>';
	foreach ($controllers as $controller) {
	    echo "<li><a href='#{$controller->name}'>{$controller->name}</a></li>";
    	//echo '<br>';
	}
	echo '</u>';
	?>
	<hr />
	
    <p>
    <u><b>Légende</b></u> :
    <ul>
    	<li><b>Couleur</b></li>
    		<ul>
            	<li><b style="color:red">rouge</b> => accès restreint partiellement ou totalement (il y a une condition d'accès)</li>
            	<li><b style="color:green">vert</b> => accès autorisé (PAS de condition d'accès)</li>
    		</ul>
    	<li><b>Condition sur le statut</b></li>
    		<ul>
            	<li><b>CREATED</b> => Le matériel doit avoir le statut "CREATED" ("créé")
            	<li><b>NOT CREATED</b> => Le matériel ne doit PAS avoir le statut "CREATED" (il doit donc avoir un statut supérieur)
            	<li><b>VALIDATED</b> => Le matériel doit être validé
            	<li><b>...</b>
    		</ul>
		</li>
    	<li><b>Condition sur l'appartenance</b></li>
    		<ul>
            	<li><b>O</b> => L'utilisateur connecté doit être le "propriétaire" (utilisateur principal) du matériel (ou le responsable) 
            	<li><b>N</b> => Pas de condition d'appartenance
    		</ul>
		</li>
    </ul>
    </p>
    <hr />
    
    <p>
        <u><b>Exemples d'interprétation (d'après le 1er tableau ci-dessous) :</b></u>
        <ul>
        <li>action "<b>add_by_copy</b>" => créer un matériel par copie d'un autre :
        	<ul>
        	<li>
            	on ne peut la faire que sur un matériel CREATED
        	</li>
        	<li>
                un profil "user" a le droit de la faire seulement sur un matériel qui lui appartient, un "responsable" seulement sur un matériel qui lui appartient ou bien qui est du même groupe que lui,   
                alors qu'un "admin" (gestionnaire) ou bien "superadmin" peuvent aussi la faire sur un matériel qui ne leur appartient pas
        	</li>
        	</ul>        
        </li>
        <li>action "<b>devalidate (statusCreated)</b>" => remettre le matériel dans l'état CREATED :
        	<ul>
        	<li>
        	    on peut la faire sur tout matériel sauf de statut CREATED
        	</li>
        	<li>
            	un "user" n'y est pas autorisé ; un "responsable" peut la faire seulement sur un matériel qui lui appartient ou du même groupe que lui alors qu'un "admin" ou "superadmin" peut la faire sur tout matériel (sauf CREATED)
        	</li>
        	</ul>
        </li>
        <li>action "<b>upgrade (statusValidated, statusTobearchived, statusArchived)</b>" => augmenter le statut d'un matériel (CREATED => VALIDATED => TOBEARCHIVED => ARCHIVED) :
        	<ul>
        	<li>
	            on peut la faire sur tout matériel qui a le statut juste inférieur (ex: statusValidated ne peut être fait que si statut actuel est CREATED)
        	</li>
        	<li>
    	        un profil "user" ou "responsable" ne peut faire que l'action statusTobearchived (demande d'archivage) sur un matériel qui lui appartient (ou du même groupe que lui pour le "responsable") 
    	        alors qu'un "admin" (et +) peut faire TOUTES les actions statusXXX et sur TOUT matériel  
        	</li>
        	</ul>
        </li>
        </ul>
    </p>
    <hr />                                                      


<?php

//var_dump($mc->getAuthorizationForAction('edit'));
foreach ($controllers as $controller) {
    //$mc = new MaterielsController();
    /*
    $controller_name = 'MaterielsController';
    $controller = new $controller_name ();
    $controller_name = $c.'Controller';
    $controller = (new $controller_name());
    */
    echo '<br>';
    displayAuthorizationsForController($controller, $lab_name);
    echo '<br>';
    echo "<a href='#'>Haut de page</a>";
    echo '<hr />';
}

?>