Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Articles liés aux permissions de groupes [résolu]
#1
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.
#2
non, pas de mémoire en tout cas. :/
#3
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.
#4
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++
#5
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à
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#6
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++
#7
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.
#8
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
#9
J'attends tes retours dans ce cas Wink
#10
ç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
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#11
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+


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)