181 lines
4.8 KiB
PHP
181 lines
4.8 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;
|
|
}
|
|
}
|