Forum CMS Made Simple FR

Version complète : Articles liés aux permissions de groupes [résolu]
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.

jack66

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.3
#~ Url du site :
#~ Hébergeur / Soft : ovh
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Salut à tous,

Plusieurs utilisateurs peuvent modifier les pages de mon site mais avec des restrictions. J'ai donc pour cela créé des groupes d'utilisateurs avec permissions et en ce qui concerne la modification des pages, seuls les utilisateurs membres du groupe utilisateur1 pourront modifier les pages 1, 2 et 3 (c'est un exemple...).
Un autre groupe utilisateur2 ne pourra modifier que les pages 4, 5 et 6. etc...

Je voudrais qu'il en soit de même pour les articles. En gros que le groupe utilisateur1 ne puisse pas avoir accès aux articles écrits par utilisateur2 et inversement.

Cela est-il possible ?
merci d'avance.
non, pas de mémoire en tout cas. :/

jack66

En modifiant le code du fichier editarticle.tpl (dans le module News), il est possible de créer une condition d'affichage de la liste des articles en fonction des utilisateurs (ça relève de la bidouille mais ça marche).

J'ai créé une balise utilisateur en php qui me permet de transférer les variables dans ce template.

Dès lors, ma question se résume à comment récupérer la variable id utilisateur (backend) ou id groupe en php ?

merci.

jack66

Bon je me réponds.

Cela relève de la bidouille mais ça marche.

Il faut créer des catégories d'article qui ont le même nom que les utilisateurs.
Exemple : l'utilisateur 'laurent' aura une catégorie d'article s’appelant 'laurent'.

On crée une balise utilisateur test (par exemple) qui récupère le nom d'utilisateur par la fonction $_SESSION :

if(isset($_SESSION['cms_admin_username']))
{
$userjack=$_SESSION['cms_admin_username'];
}

if($userjack=='admin') // si l'utilisateur est admin alors il a le droit de voir tous les articles.
{
$userjack='all';
}

$smarty->assign('userjack', $userjack);


On fait appel à la balise utilisateur dans le fichier template des News : articlelist.tpl

à la ligne 75 :

{foreach from=$items item=entry}

{test} on appelle la balise utilisateur qui nous donne le nom de l'utilisateur

{if $entry->category|strstr:$userjack or $userjack|strstr:'all'} on compare avec la catégorie qui doit porter le même nom ou all pour tout voir (admin)

<tr class="{$entry->rowclass}">
<td>{$entry->title}</td>
<td>{$entry->u_postdate|cms_date_format}</td>

......
{/if}
{/foreach}


Voilà cela permet à l'utilisateur 'laurent' de ne voir que les articles de la catégorie 'laurent'
Rien n'empêche de créer des sous catégories avec des noms différents. L'essentiel étant que la catégorie mère porte le nom de l'utilisateur.
admin quant à lui peut tout voir.

Bon c'est sûr, c'est pas propre et cela relève d'une pirouette mais en tout cas ça fonctionne pour moi.
a++
Bonjour, bienvenue et bien joué Smile
Pour ne pas modifier la source du template qui pourrait être écrasée lors d'une mise à jour tu dois créer un dossier module_custom à la racine du site et recréer l'arborescence des modules.
Cela n'est valable que pour les dossiers lang et templates.
Dans ton cas :
module_custom/News/templates/articlelist.tpl.

Voilà voilà

jack66

merci, effectivement je n'avais pas pensé aux mises à jour.

On doit également mettre l'appel à la balise {test} hors de la boucle foreach de articlelist.tpl, comme ça c'est mieux :

à la ligne 75 :

{test} on appelle la balise utilisateur qui nous donne le nom de l'utilisateur

{foreach from=$items item=entry}


{if $entry->category|strstr:$userjack or $userjack|strstr:'all'} on compare avec la catégorie qui doit porter le même nom ou all pour tout voir (admin)

<tr class="{$entry->rowclass}">
<td>{$entry->title}</td>
<td>{$entry->u_postdate|cms_date_format}</td>

......
{/if}
{/foreach}


a++
sympa ce petit hack, c'est propre et tu touches pas au code source...

chapeau monsieur Smile

Nous autoriserais tu à en faire une note sur le blog (en te nommant ça va de soi)

je te laisse de toute façon quelques jours le temps de prendre le recul sur ton propre code et éventuellement l'améliorer si tu vois que c'est nécessaire.

jack66

aucun problème pour le blog j'en serais même très fier pour ma première contribution Wink . Il reste encore des détails à améliorer :

- Lorsqu'un utilisateur crée un article, il faut que la catégorie proposée par défaut (et ses sous-catégories) corresponde à cet utilisateur. De manière à éviter qu'il crée un article dans la catégorie d'un autre utilisateur.

- désactiver l'onglet catégories permettant de créer ou modifier des catégories existantes.

- cette astuce étant très ciblée, il faut éviter que des sous-catégories portent le même nom qu'une catégorie mère, auquel cas ça deviendrait vite la pagaille.

Je mettrai en ligne prochainement ces modifications.
a++

Jack66
J'attends tes retours dans ce cas Wink
ça me parait difficile à réaliser sans toucher au code source.
Dans ce cas, peut-être vaudrait-il mieux utiliser un générateur genre listit.
http://dev.cmsmadesimple.org/projects/listit2

jack66

Exact, j'ai été obligé de modifier le code source. Ce serait bien qu'un module soit développé pour ça. Je pense que ça peut servir à pas mal de monde.
En tout cas merci pour le coup de main.
a+