forked from ZwiiCMS-Team/ZwiiCMS
10.2 accès concurrents WIP
This commit is contained in:
parent
c5f3c0ac4b
commit
77c930d737
@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## version 10.2.000
|
||||
- Nouveautés :
|
||||
- Gestion des accès concurrents :
|
||||
- deux utilisateurs ne peuvent accèder en modification à la même page du site ou de configuration
|
||||
- la connexion d'un utilisateur sur un autre poste ou navigateur déconnecte la session précédente.
|
||||
- Modifications :
|
||||
- Thème, les sélecteurs de couleur affiche la valeur RGBa d'une couleur différente de celle de la sélection.
|
||||
- Thème de l'administration, amélioration du rendu.
|
||||
|
||||
## version 10.1.000
|
||||
- Nouveautés :
|
||||
- Distinction entre le thème du site et celui de l'administration. Sauvegarde et restauration de l'un ou de l'autre.
|
||||
|
@ -36,7 +36,7 @@ class common {
|
||||
const THUMBS_WIDTH = 640;
|
||||
|
||||
// Numéro de version
|
||||
const ZWII_VERSION = '10.1.001.dev1';
|
||||
const ZWII_VERSION = '10.2.00.dev3';
|
||||
const ZWII_UPDATE_CHANNEL = "v10";
|
||||
|
||||
public static $actions = [];
|
||||
@ -59,6 +59,13 @@ class common {
|
||||
'theme',
|
||||
'admin'
|
||||
];
|
||||
public static $accessList = [
|
||||
'user',
|
||||
'theme',
|
||||
'config',
|
||||
'edit',
|
||||
'config'
|
||||
];
|
||||
private $data = [];
|
||||
private $hierarchy = [
|
||||
'all' => [],
|
||||
@ -1585,10 +1592,11 @@ class core extends common {
|
||||
header('Location:' . helper::baseUrl() . 'install');
|
||||
exit();
|
||||
}
|
||||
// Force la déconnexion des membres bannis
|
||||
// Force la déconnexion des membres bannis ou d'une seconde session
|
||||
if (
|
||||
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
|
||||
AND $this->getUser('group') === self::GROUP_BANNED
|
||||
AND ( $this->getUser('group') === self::GROUP_BANNED
|
||||
OR $_SESSION['csrf'] !== $this->getData(['user',$this->getUser('id'),'accessCsrf']) )
|
||||
) {
|
||||
$user = new user;
|
||||
$user->logout();
|
||||
@ -1616,6 +1624,7 @@ class core extends common {
|
||||
}
|
||||
// Check l'accès à la page
|
||||
$access = null;
|
||||
$accessInfo['user'] = '';
|
||||
if($this->getData(['page', $this->getUrl(0)]) !== null) {
|
||||
if(
|
||||
$this->getData(['page', $this->getUrl(0), 'group']) === self::GROUP_VISITOR
|
||||
@ -1635,6 +1644,21 @@ class core extends common {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Controle si la page demandée est en édition oua ccès à la gestion du site
|
||||
foreach($this->getData(['user']) as $userId => $userIds){
|
||||
$t = explode('/',$this->getData(['user', $userId, 'accessUrl']));
|
||||
if ( $this->getData(['user', $userId,'accessUrl']) === $this->getUrl() &&
|
||||
$userId !== $this->getuser('id') &&
|
||||
array_intersect($t,self::$accessList) ) {
|
||||
$access = false;
|
||||
$accessInfo['user'] = $this->getData(['user', $userId, 'lastname']) . ' ' . $this->getData(['user', $userId, 'firstname']);
|
||||
}
|
||||
}
|
||||
// Accès concurrent stocke la page visitée
|
||||
if ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')) {
|
||||
$this->setData(['user',$this->getuser('id'),'accessUrl',$this->getUrl()]);
|
||||
$this->setData(['user',$this->getuser('id'),'acessTime',time()]);
|
||||
}
|
||||
|
||||
// Breadcrumb
|
||||
$title = $this->getData(['page', $this->getUrl(0), 'title']);
|
||||
@ -1852,11 +1876,18 @@ class core extends common {
|
||||
}
|
||||
if($access === false) {
|
||||
http_response_code(403);
|
||||
if ($accessInfo['user']) {
|
||||
$this->addOutput([
|
||||
'title' => 'Accès verrouillé',
|
||||
'content' => template::speech('La page demandée est ouverte par l\'utilisateur <strong>' . $accessInfo['user'] . '</strong>. Merci de patienter.')
|
||||
]);
|
||||
} else {
|
||||
$this->addOutput([
|
||||
'title' => 'Erreur 403',
|
||||
'content' => template::speech('Vous n\'êtes pas autorisé à accéder à cette page...')
|
||||
]);
|
||||
}
|
||||
}
|
||||
elseif($this->output['content'] === '') {
|
||||
http_response_code(404);
|
||||
$this->addOutput([
|
||||
|
@ -340,6 +340,8 @@ class user extends common {
|
||||
$expire = $this->getInput('userLoginLongTime') ? strtotime("+1 year") : 0;
|
||||
setcookie('ZWII_USER_ID', $userId, $expire, helper::baseUrl(false, false));
|
||||
setcookie('ZWII_USER_PASSWORD', $this->getData(['user', $userId, 'password']), $expire, helper::baseUrl(false, false));
|
||||
// Accès multiples avec le m$eme compte
|
||||
$this->setData(['user',$userId,'accessCsrf',$_SESSION['csrf']]);
|
||||
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur
|
||||
if(
|
||||
$this->getData(['config', 'maintenance'])
|
||||
|
Loading…
x
Reference in New Issue
Block a user