F-d-ration_de_groupes/balint_autorisations.php

183 lines
4.9 KiB
PHP

<?php
/**
* Définit les autorisations du plugin balint
*
* @plugin balint
* @copyright 2020
* @author Gamuza[informatique]
* @licence GNU/GPL
* @package SPIP\Fip\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'appel pour le pipeline
* @pipeline autoriser */
function balint_autoriser() {
}
// Pour ne permettre l'accès à l'espace privé qu'aux admins
// (pour les autres, on redirige vers l'accueil)
function autoriser_ecrire($faire, $type, $id, $qui, $opt){
return in_array($qui['statut'], array('0minirezo'));
}
function autoriser_auteur_modifier($faire, $type, $id, $qui, $opt) {
// Ni admin ni redacteur => non
if (!in_array($qui['statut'], array('0minirezo', '1comite', '6forum'))) {
return false;
}
// Un redacteur peut modifier ses propres donnees mais ni son login/email
// ni son statut (qui sont le cas echeant passes comme option)
if (in_array($qui['statut'], array('1comite','6forum'))) {
if (!empty($opt['webmestre'])) {
return false;
} elseif (
!empty($opt['statut'])
or !empty($opt['restreintes'])
or !empty($opt['email'])
) {
return false;
} elseif ($id == $qui['id_auteur']) {
return true;
} else {
return false;
}
}
// Un admin restreint peut modifier/creer un auteur non-admin mais il
// n'a le droit ni de le promouvoir admin, ni de changer les rubriques
if ($qui['restreint']) {
if (isset($opt['webmestre']) and $opt['webmestre']) {
return false;
} elseif ((isset($opt['statut']) and ($opt['statut'] == '0minirezo'))
or (isset($opt['restreintes']) and $opt['restreintes'])
) {
return false;
} else {
if ($id == $qui['id_auteur']) {
if (isset($opt['statut']) and $opt['statut']) {
return false;
} else {
return true;
}
} else {
if ($id_auteur = intval($id)) {
$t = sql_fetsel('statut', 'spip_auteurs', "id_auteur=$id_auteur");
if ($t and $t['statut'] != '0minirezo') {
return true;
} else {
return false;
}
} // id = 0 => creation
else {
return true;
}
}
}
}
// Un admin complet fait ce qu'il veut
// sauf se degrader
if ($id == $qui['id_auteur'] && (isset($opt['statut']) and $opt['statut'])) {
return false;
} elseif (isset($opt['webmestre'])
and $opt['webmestre']
and (defined('_ID_WEBMESTRES')
or !autoriser('webmestre'))) {
// et toucher au statut webmestre si il ne l'est pas lui meme
// ou si les webmestres sont fixes par constante (securite)
return false;
} // et modifier un webmestre si il ne l'est pas lui meme
elseif (intval($id) and autoriser('webmestre', '', 0, $id) and !autoriser('webmestre')) {
return false;
} else {
return true;
}
}
function autoriser_article_lire($faire, $type, $id, $qui, $opt) {
// Si l'article fait partie de la rubrique "Espace membre", il faut être au moins rédacteur ("membre").
$id_membre = lire_config('balint/id_mots_espace_membre');
$id_mot = sql_getfetsel('id_mot','spip_mots','id_groupe='. $id_membre);
if (in_array($id_mot, $opt)){
return in_array($qui['statut'], array('0minirezo','1comite'));
}
// Sinon il faut être admin
else{
return true;
}
}
function autoriser_article_modifier($faire, $type, $id, $qui, $opt) {
if (in_array($qui['id_auteur'],auteurs_objet('article',$id))){
return true;
}
else {
return in_array($qui['statut'], array('0minirezo'));
}
}
function autoriser_article_rediger($faire, $type, $id, $qui, $opt) {
// Si le membre est rédacteur, il doit être animateur d'au moins un groupe
if ($qui['statut']=="1comite"){
$id_rub = lire_config('balint/id_rub_groupes');
$T_id_groupes = sql_allfetsel('id_article','spip_articles','id_secteur=' . $id_rub);
foreach($T_id_groupes as $id_groupe){
if (in_array($qui['id_auteur'],auteurs_objet('article',$id_groupe['id_article']))){
return true;
}
}
}
// Sinon il faut être admin
else{
return in_array($qui['statut'], array('0minirezo'));
}
}
function autoriser_sujet_creer($faire, $type, $id, $qui, $opt) {
return in_array($qui['statut'], array('0minirezo','1comite'));
}
function autoriser_sujet_editer($faire, $type, $id, $qui, $opt) {
// Seul les admins et l'auteur peuvent le supprimer
if (in_array($qui['id_auteur'],auteurs_objet('article',$id))){
return true;
}
else {
return in_array($qui['statut'],array('0minirezo'));
}
}
function autoriser_forum_voir($faire, $type, $id, $qui, $opt) {
$id_auteur = $qui['id_auteur'];
// Il faut être au moins membre
if ($qui['statut'] == '1comite'){
// si le forum est privé, il faut être membre du bureau
if ($id == lire_config('balint/id_rub_forum_prive')){
if (sql_getfetsel('bureau','spip_auteurs',"id_auteur=$id_auteur")=='on'){
return true;
}
else{
return false;
}
}
else{
return true;
}
}
// Les admins ont accès à tout
if ($qui['statut']=='0minirezo'){
return true;
}
// si aucun des cas précédents (pas loggué par ex)
return false;
}