90 lines
2.2 KiB
PHP
90 lines
2.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Classe per gestire i permessi di accesso alle diverse sezioni del progetto.
|
|
*
|
|
* @since 2.3
|
|
*/
|
|
class Permissions
|
|
{
|
|
protected static $permissions = [];
|
|
protected static $skip_permissions = false;
|
|
|
|
/**
|
|
* Aggiunge un modulo di cui eseguire il controllo dei permessi.
|
|
*
|
|
* @param string $id
|
|
*/
|
|
public static function addModule($module)
|
|
{
|
|
$id = Modules::getModule($module)['id'];
|
|
if (is_int($id) && !in_array($id, self::$permissions)) {
|
|
self::$permissions[] = $id;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ignora il controllo dei permessi per la pagina corrente.
|
|
*/
|
|
public static function skip()
|
|
{
|
|
self::$skip_permissions = true;
|
|
}
|
|
|
|
/**
|
|
* Riabilita il controllo dei permessi per la pagina corrente.
|
|
*/
|
|
public static function execute()
|
|
{
|
|
self::$skip_permissions = false;
|
|
}
|
|
|
|
/**
|
|
* Restituisce la variabile per cui si effettua o meno il controllo dei permessi per la pagina corrente.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function getSkip()
|
|
{
|
|
return self::$skip_permissions;
|
|
}
|
|
|
|
/**
|
|
* Esegue il controllo dei permessi.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public static function check($permissions = [])
|
|
{
|
|
if (empty($permissions)) {
|
|
$permissions = ['r', 'rw'];
|
|
} elseif (!is_array($permissions)) {
|
|
$permissions = [$permissions];
|
|
}
|
|
|
|
$result = true;
|
|
|
|
if (!self::getSkip()) {
|
|
if (!Auth::check() && slashes($_SERVER['SCRIPT_FILENAME']) == slashes(DOCROOT.'/index.php')) {
|
|
redirect(ROOTDIR.'/index.php');
|
|
exit();
|
|
$result = false;
|
|
} else {
|
|
if (!empty(self::$permissions)) {
|
|
foreach (self::$permissions as $module) {
|
|
if (!in_array(Modules::getPermission($module), $permissions)) {
|
|
$result = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$result) {
|
|
die(_('Accesso negato'));
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|