[spip-dev] forums et autorisations

J'ai une question/suggestion concernant les droits sur le contrôle des forums.

En fait c'est par rapport à l'appel de autoriser('publierdans','rubrique',_request('id_rubrique')) dans la fonction exec_controle_forum_dist().
Je comprend bien que le but est de donner à une personne le droit de modérer les forums associés aux articles qu'elle peut valider dans une rubrique donnée, mais si ce comportement peut être adopté par défaut, il ne doit pas empêcher une gestion plus fine des autorisations sur les forums (par exemple n'autoriser que certains admins à modérer les forums).
Selon moi le contrôle des forums ne devrait donc jamais être directement lié aux droits de validation d'un article. C'est pourquoi l'appel autoriser('publierdans') est problématique car dans le cas d'un admin, ou d'un admin restreint l'utilisation autoriser('modererforum') est court-circuitée.
De plus, par défaut autoriser('modererforum') est basée sur l'autorisation de modification de l'objet auquel est associé le forum, ce qui fait doublons avec autoriser('publierdans') (me semble t-il).

Du coup y a t-il une raison particulière pour gérer les autorisations de cette manière? Parce que sinon je suggère de virer complétement autoriser('publierdans') pour n'utiliser que autoriser('modererforum').
Cette demande de modification n'est pas innocente de ma part car je souhaiterai grâce au plugin autorité gérer ce genre de chose (actuellement ce n'est pas possible à cause justement de ce truc là).
J'ai déjà fais quelques tests et ça semble bien fonctionner.

bubu

Oui oui, moi ça me parait évident que pour un action X sur un objet Y, on utilise la fonction autoriser(X, Y...). Quitte à déporter à l'intérieur vers une autre fonction par défaut.

T'as un patch ? Par contre ça sera pas dans la 2.1.3. :slight_smile:

Il faut aussi modifier la fonction autoriser_rubrique_publierdans_dist()
dans inc/autorite.php.
En fait je me suis aperçu qu'un admin restreint pouvaient publier dans
id_rubrique=0 (gloups). De plus autoriser('modererforum') fait appel par
défaut à autoriser('publierdans'), et comme controle_forum.php se lance
avec un id_rubrique=0, les admins restreints obtiennent l'accès à la
validation des forums de n'importe quel article.

Sinon je ne sais pas comment ça se passe pour les patchs, surtout que
moi je travail sur la 2.1.2. Du coup je balance juste les modifs :

inc/autorite.php :

function autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui,
$opt) {
  return
    ($qui['statut'] == '0minirezo')
    AND (!$qui['restreint'] OR in_array($id,qui['restreint']));
    // AND (
    // !$qui['restreint'] OR !$id
    // OR in_array($id, $qui['restreint'])
    //);
}

Pour les forums, j'ai fais la modif dans exec/controle_forum.php (tjs
2.1.2) dans la fonction exec_controle_forum_args(), du coup je sais pas
si c'est encore valable :

// if (!autoriser('publierdans','rubrique',$id_rubrique))
if ( !autoriser('modererforum','rubrique',$id_rubrique))

J'ai vu dans le plugin "interface d'administration des forums", que le
code était différent et que les autorisations étaient faites dans la
fonction exec_controle_forum_dist(). Je n'ai pas testé, mais de toute
façon l'idée c'est de remplacer
autoriser('publierdans','rubrique',_request('id_rubrique'))
par
autoriser('modererforum','rubrique',_request('id_rubrique'))

En fait par défaut les deux vont être équivalentes, mais ça permettra
par la suite de changer les droits d'accès à controle_forum.php en
passant uniquement par autoriser(modererforum) sans modifier
autoriser(publierdans).

Désolé si c'est pas très clair :confused: