Forum CMS Made Simple FR
FrontEndUsers - Définition de droits d'accès par utilisateur - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Modules, Tags (https://forum.cmsmadesimple.fr/forum-14.html)
+--- Sujet : FrontEndUsers - Définition de droits d'accès par utilisateur (/thread-2263.html)



FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 03/10/2012

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



Bonjour,

Est-il possible de définir des droits d'accès pour un seul utilisateur et non pour un groupe tout entier ?

Dans le cadre d'un petit espace "pro", je dois donner des accès séparés pour chaque personne.

La solution alternative serait de créer un groupe par personne mais j'aimerais éviter cette étape à mon client.

D'avance merci !


FrontEndUsers - Définition de droits d'accès par utilisateur - bess - 03/10/2012

front ou back l'espace pro ?


FrontEndUsers - Définition de droits d'accès par utilisateur - jissey - 03/10/2012

salut les cadors!
feu=front (enfin... pour moi)
Tu peux sans doute gérer ça avec customContent car les droits sont attribués aux groupes dans FEU.
Ou bien faire une udt qui créer le groupe du même nom que l'utilisateur en te servant des événements :
à la création du user, tu le met dans un groupe "pro" par exemple et dans ton udt, tu testes le groupe et si=pro, tu créer un autre groupe avec le pseudo que tu lui attribues.
Mais tu vas me dire que "oui, j'avais bien pensé à ça, mais je voulais juste savoir si c'était possible" Wink


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 03/10/2012

En front end bess


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 03/10/2012

@jissey, non j'avais pas pensé à ca. Bonne suggestion. Mais si je comprend bien, je ne peux pas nativement dire "Mr X a droit à accéder à telle page".


FrontEndUsers - Définition de droits d'accès par utilisateur - bess - 03/10/2012

FEU est capable de filtrer par utilisateur ou par groupe. Le plus utilisé est par le groupe, mais on peut imaginer faire des traitement user par user ?

tout dépend de ce qu'ils sont sensé y faire/déposer/écrire.


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 03/10/2012

Ah bon pourtant dans les pages protégées on ne peut choisir que des groupes. Y a une option quelque part à activer pour choisir des users ?


FrontEndUsers - Définition de droits d'accès par utilisateur - bess - 03/10/2012

tout dépend de ce que tu veux faire, explique nous concrètement ce qu'ils vont pouvoir faire dans leur page perso ??


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 03/10/2012

En gros, les clients de mon client vont y trouver une ou plusieurs pages de consignes de montages et de liens vers de la doc technique.

C'est pour ca que je voudrais pouvoir attribuer les droits d'accès à une page à un seul user mais on peut tout à fait imaginer d'utiliser la solution de Jissey : créer automatiquement le groupe à la création du user et laisser sélectionner ce groupe lors de la création de la page.


FrontEndUsers - Définition de droits d'accès par utilisateur - bess - 03/10/2012

ou créer une page unique, et y afficher le contenu selon l'utilisateur.

FEU + CustomContent savent très bien le faire.


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 03/10/2012

oui mais c'est pas si simple car mon client va ajouter librement des utilisateurs... je le vois mal chipoter avec smarty !


FrontEndUsers - Définition de droits d'accès par utilisateur - bess - 04/10/2012

non, tu rend automatique dans le code de la page avec un peu de généricité

utilise un module, peu importe, qui sera utilisé par ton client pour renseigner les data.

J'imagine un truc du style : Les documents : name + libelle + contenu et les droits d'accès : name + user pour laisser mapper les droits entre les utilisateurs et les documents.

Une fois l'information 1 utilisateur à droit à 0/n documents tu fais appel dans la page du front à un code du type

$userId = getCurrentUserId()
$document = [obtenir la liste des documents pour l'utilisateur via son userId]

et ensuite un bon foreach des familles sur la liste des documents. Une seule page, un seul code, les utilisateurs peuvent s'enregistrer à souhait et l'admin affecter les accès aux documents seul.

pas clair ?


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 04/10/2012

Oui c'est aussi une solution ca !

Je vais voir laquelle est la plus rapide à mettre en place avec le temps et le budget dont je dispose.

Merci !


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 04/10/2012

Bon je suis sur une solution, je l'expliquerai par ici quand ca sera terminé mais avant toute chose, MERCI à jissey pour l'info sur les évènements et les udt que je ne connaissais pas ! (les events).

Vraiment super ce CMS !


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 05/10/2012

Bon je l'avais promis... voici la solution. Je ne cache pas que j'ai du aller fouiller profond dans le code de FrontEndUsers et de l'admin de CMSMS pour trouver tous les morceaux de code nécessaire.

En résumé, mon client doit simplement ajouter un utilisateur, mon UDT fait le reste, soit :

1) Créer un dossier du nom du compte utilisateur, protégé par une page index.html
2) Ajouter un groupe d'utilisateurs dans FEU du nom de l'utilisateur
3) Ajouter les mêmes propriétés de groupes que celles d'un groupe "modèle"
4) Associer le groupe et l'utilisateur
5) Créer une page protégée du nom de l'utilisateur, sous laquelle le client ajoutera une page par projet
6) Ajouter le groupe de l'utilisateur dans les autorisations de cette page

La page du compte professionnel est placée dans l'arbo sous "Mon compte pro". Cette page affiche tous les projets de l'utilisateur connecté.

Code :
[== PHP ==]
// Get site config
$config=cmsms()->GetConfig();
// Build directory name
$gname=$params['name'];
$uid=$params['id'];
$dir_name=$config['root_path'].'/uploads/compte-pro/'.$gname;
// Create directory
mkdir($dir_name);
// Add index.html file for security reasons
$handle=fopen($dir_name.'/index.html', "w+");
fclose($handle);
// Creates group using email address
$feu=cms_utils::get_module('FrontEndUsers');
$feu->AddGroup($gname, 'Droits pour utilisateur '.$gname);
$gid=$feu->GetGroupID($gname);
$default_gid=$feu->GetGroupID('Client_Modele');// template group
foreach($feu->GetGroupPropertyRelations($default_gid) as $prop)
{
    $feu->AddGroupPropertyRelation($gid, $prop['name'], $prop['sort_key'],$prop['lostunflag'], $prop['required']);
}
// Add user in this group
$feu->AssignUserToGroup($uid, $gid);
// Create user page
// --------------------------------------------------------
// Following code comes from admin/addcontent.php core file
check_login();
$userid = get_userid();

$metadata = get_site_preference('page_metadata');

$parent_id = 63; // // page mon-espace-pro

$contentops = cmsms()->GetContentOperations();
$contentobj = $contentops->CreateNewContent('Content'); // Cannot create CustomContent type
// Change content type
include_once($config['root_path']."/admin/editcontent_extra.php");
// Set access rights to this page to our new user
$params['__feu_groups__']=array($gid);
copycontentobj($contentobj, 'feu_protected_page', $params);

$contentobj->SetAddMode();
$contentobj->SetOwner($userid);
$contentobj->SetCachable("1");
$contentobj->SetActive("1");
$contentobj->SetShowInMenu("1");
$contentobj->SetLastModifiedBy($userid);
$contentobj->SetName($gname);
$contentobj->SetMenuText($gname);
$contentobj->SetAlias($gname, true);

{
$templateops = cmsms()->GetTemplateOperations();
$dflt = $templateops->LoadDefaultTemplate();
if( isset($dflt) )
  {
$contentobj->SetTemplateId($dflt->id);
  }
}

// this stuff should be changed somehow.
$contentobj->SetMetadata($metadata);
$contentobj->SetPropertyValue('content_en', '<p>Page du compte client'.$gname.'</p>'); // why?

if ($parent_id!=-1) $contentobj->SetParentId($parent_id);
$contentobj->SetPropertyValue('searchable', 0);
$contentobj->SetPropertyValue('extra1',
            get_site_preference('page_extra1',''));
$contentobj->SetPropertyValue('extra2',
            get_site_preference('page_extra2',''));
$contentobj->SetPropertyValue('extra3',
            get_site_preference('page_extra3',''));
$tmp = get_site_preference('additional_editors');
$tmp2 = array();
if( !empty($tmp) )
{
  $tmp2 = explode(',',$tmp);
}
$contentobj->SetAdditionalEditors($tmp2);

// End of addcontent.php code sample
// --------------------------------------------------------
$contentobj->Save();
// Generates Hierarchy Position
$contentops = cmsms()->GetContentOperations();
$contentops->SetAllHierarchyPositions();



FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 05/10/2012

Ah et encore merci Jissey pour m'avoir mis le nez sur les events... et bess pour tes conseils !


FrontEndUsers - Définition de droits d'accès par utilisateur - jissey - 05/10/2012

Salut,
merci de rien.
Intéressante à lire, cette UDT.
Mais la solution de Bess me semblait plus simple.


FrontEndUsers - Définition de droits d'accès par utilisateur - heriquet - 05/10/2012

Oui et non... la page du client sera un mixte d'explications et de liens vers des docs ou autre.

L'avantage de rester dans une page est la flexibilité.

Et d'avoir eu l'occase de mieux connaitre cmsms...