Changeset 59811 in spip-zone


Ignore:
Timestamp:
Mar 27, 2012, 10:32:21 AM (8 years ago)
Author:
jeannolapin@…
Message:

Associaspip Introduction de la gestion des droits d'accès, pour l'instant limités aux membres de l'association et à la gestion des groupes et autorisations.

Location:
_plugins_/Association/Associaspip
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/Association/Associaspip/association_autorisations.php

    r57780 r59811  
    1111}
    1212
     13/* Les autorisation d'acces sont geres par des groupes de membres(d'auteur SPIP en fait,
     14un auteur non membre peut avoir un access, par exemple le personnel administratif de l'asso) */
     15/* Mapping des id de groupes et des autorisations associées, qu'ils soient ou non present dans le groupe, les webmestres ont tous les acces, les admins non restreints certains */
     16/* 1 => edition des groupes y compris ceux d'autorisation */
     17/* 2 => edition des groupes d'id>100 */
     18/* 10 => expert-comptable: toutes les autorisations sur la compta. */
     19/* 11 => comptable: peut enregistrer des ecritures mais pas modifier le plan comptable */
     20/* 12 => auditeur: acces en lecture seule a la comptabilité */
     21
     22/* teste si un auteur est dans un groupe ou une liste de groupes */
     23/* $id_groups peut etre un tableau ou un simple id de groupe */
     24/* return a boolean */
     25function is_in_groups($id_auteur, $id_groupes)
     26{
     27        $where = "id_auteur=$id_auteur AND ";
     28        if (is_array($id_groupes)) {
     29                $where .= sql_in("id_groupe", $id_groupes);
     30        } else {
     31                $where .= "id_groupe=$id_groupes";
     32        }
     33
     34        if (sql_countsel("spip_asso_groupes_liaisons", $where) != 0) {
     35                return true;
     36        } else {
     37                return false;
     38        }
     39}
     40
     41/* gestion des autorisations : seuls les webmestres ont acces si non listes */
     42function autoriser_association_gerer_autorisations_dist($faire, $type, $id, $qui, $opt) {
     43        if ($qui['statut']=='0minirezo' && $qui['webmestre']=='oui') {
     44                return true; // on retourne ok pour tous les webmestres
     45        }
     46        return is_in_groups($qui['id_auteur'], 1); /* c'est le groupe 1 qui liste les gens qui peuvent toucher aux autorisations */
     47}
     48
     49/* edition des groupes */
     50function autoriser_association_editer_groupes_dist($faire, $type, $id, $qui, $opt) {
     51        /* si l'id est-il inferieur a 100 et different de 0(creation d'un groupe) -> groupe d'autorisations: on retourne le resultat de la fonction d'autorisation de gestion des autorisations */
     52        if ($id!=0 && $id<100) { /* on n'arrive jamais ici sauf si quelqu'un entre des urls a la main ce qui peut arriver */
     53                return autoriser_association_gerer_autorisations_dist($faire, $type, $id, $qui, $opt); 
     54        }
     55
     56        if ($qui['statut']=='0minirezo' && !$qui['restreint']) {
     57                return true; // on retourne ok pour tous les admins non restreints
     58        }
     59
     60        return is_in_groups($qui['id_auteur'], array(1,2)); // c'est le groupe 2 qui a le pouvoir de modifier les groupes(mais pas les autorisations), le groupe 1 peut modifier tout ce qui touche aux groupes(ceux d'autorisations inclus)
     61}
     62
    1363?>
  • _plugins_/Association/Associaspip/base/association_gestion.php

    r59469 r59811  
    5252}
    5353
     54// fonction qui va remplir ou mettre a jour la table spip_asso_groupes
     55// pour y a definir les groupes gerant les autorisations (id<100)
     56function association_gestion_autorisations_upgrade()
     57{
     58        spip_log("UPGRADE DEBUG");
     59        // definir tous les groupes qui doivent exister
     60        $groupes_autorisations = array(1,2);
     61
     62        // recuperer tous ceux existants
     63        $groupes_existants = array();
     64        $query = sql_select('id_groupe', 'spip_asso_groupes', 'id_groupe<100');
     65        while ($data = sql_fetch($query)) {
     66                $groupes_existants[$data['id_groupe']] = true;
     67        }
     68
     69        // inserer toutes les entrees necessitant une mise à jour
     70        $groupes_a_inserer = array();
     71        foreach ($groupes_autorisations as $id_groupe) {
     72                if (!$groupes_existants[$id_groupe]) { // il manque un entree
     73                        $groupes_a_inserer[]=array('id_groupe'=>$id_groupe);
     74                }
     75        }
     76        sql_insertq_multi('spip_asso_groupes', $groupes_a_inserer);
     77}
     78
    5479// MAJ des tables de la base SQL
    5580// Retourne 0 si ok, le dernier numero de MAJ ok sinon
     
    75100                alterer_base($GLOBALS['tables_principales'],
    76101                             $GLOBALS['tables_auxiliaires']);
     102                association_gestion_autorisations_upgrade();
    77103                ecrire_meta($meta, $courante, NULL, $table);
    78104                return 0; // Reussite (supposee !)
     
    562588);
    563589
    564 
    565 
     590// introduction des groupes 1 et 2 dans la table spip_asso_groupes
     591$GLOBALS['association_maj'][59811] = array(
     592        array('association_gestion_autorisations_upgrade')
     593);
     5943
    566595?>
  • _plugins_/Association/Associaspip/exec/association.php

    r59668 r59811  
    2929                $res['editer_asso_metas_utilisateur_lien'] = array('assoc_qui.png', 'editer_asso_metas_utilisateur');
    3030                $res['categories_de_cotisations'] = array('cotisation.png', 'categories');
    31                 if ( test_plugin_actif('ASSOCIATION') ) {
    32                         $res['plan_comptable'] = array('plan_compte.png', 'plan');
    33                         if ($GLOBALS['association_metas']['destinations'])
     31                if (autoriser('gerer_autorisations', 'association')) {
     32                        $res['gerer_les_autorisations'] = array('droit_acces.png', 'association_autorisations');
     33                }
     34                $res['plan_comptable'] = array('plan_compte.png', 'plan');
     35                if ($GLOBALS['association_metas']['destinations']) {
    3436                                $res['destination_comptable'] = array('plan_compte.png', 'destination');
    35                         $res['exercices_budgetaires_titre'] = array('plan_compte.png', 'exercices');
    3637                }
     38                $res['exercices_budgetaires_titre'] = array('plan_compte.png', 'exercices');
     39               
    3740                icones_association(array(), $res);
     41
    3842                debut_cadre_association('annonce.gif', 'association_infos_contacts');
    3943                echo '<div class="vcard" id="vcard-asso">';
  • _plugins_/Association/Associaspip/exec/edit_groupe.php

    r59668 r59811  
    1818function exec_edit_groupe()
    1919{
    20         if (!autoriser('associer', 'groupes')) {
     20        $id_groupe = intval(_request('id'));
     21        if (!autoriser('editer_groupes', 'association', $id_groupe)) {
    2122                include_spip('inc/minipres');
    2223                echo minipres();
    2324        } else {
    24                 $id_groupe = intval(_request('id'));
    2525                onglets_association('gestion_groupes');
    2626                // INFO
  • _plugins_/Association/Associaspip/exec/voir_groupe.php

    r59668 r59811  
    1818function exec_voir_groupe()
    1919{
    20         if (!autoriser('associer', 'groupes')) {
     20        $id_groupe = intval(_request('id'));
     21        if (!autoriser('editer_groupes', 'association', $id_groupe)) {
    2122                include_spip('inc/minipres');
    2223                echo minipres();
    2324        } else {
    24                 $id_groupe = intval(_request('id'));
    25                 onglets_association('gestion_groupes');
     25                onglets_association(($id_groupe>=100)?'gestion_groupes':'gerer_les_autorisations');
    2626                // INFO
    2727                $groupe = sql_fetsel('*', 'spip_asso_groupes', "id_groupe=$id_groupe" );
    28                 $infos['ordre_affichage_groupe'] = $groupe['affichage'];
     28                if ($id_groupe>=100) {
     29                        $infos['ordre_affichage_groupe'] = $groupe['affichage'];
     30                }
    2931                $infos['commentaires'] = $groupe['commentaires'];
    3032                $infos['destination_entete_utilise'] = _T('asso:nombre_fois', array('nombre'=>sql_countsel('spip_asso_groupes_liaisons',"id_groupe=$id_groupe")) );
    31                 echo totauxinfos_intro($groupe['nom'], 'groupe', $id_groupe, $infos );
     33                echo totauxinfos_intro(($id_groupe<100)?_T("asso:groupe_".$id_groupe):$groupe['nom'], 'groupe', $id_groupe, $infos );
    3234                // datation et raccourcis
    3335                icones_association('', array(
    34                         'editer_groupe' => array('edit-24.gif', 'edit_groupe', "id=$id_groupe"),
     36                        'editer_groupe' => array('edit-24.gif', ($id_groupe<100)?'edit_groupe_autorisations':'edit_groupe', "id=$id_groupe"),
    3537                ) );
    3638                debut_cadre_association('annonce.gif', 'groupe_dp', $groupe['nom']); // preferer "membre du groupe ..."
  • _plugins_/Association/Associaspip/formulaires/editer_asso_groupes.html

    r57835 r59811  
    66                #ACTION_FORMULAIRE{#ENV{action}}
    77                <ul>
    8                         <li class="editer_date">
     8                        <li class="editer_nom">
    99                                [<span class="erreur_message">(#ENV**{erreurs}|table_valeur{nom_groupe})</span>]
    1010                                <label for="nom"><:asso:nom_groupe:></label>
    11                                 <input type="text" name="nom" [value="(#ENV{nom})"] id="nom" class="text" />
     11                                <input [(#ENV{id_groupe}|<{100}|oui) disabled="disabled" [value="(#VAL{asso:groupe_#ENV{id_groupe}}|_T)"]] type="text" name="nom" [(#ENV{id_groupe}|>={100}|oui) [value="(#ENV{nom})"]] id="nom" class="text" />
    1212                        </li>
    1313                        <li class="editer_commentaires">
     
    1515                                <textarea name="commentaires" id="commentaires" rows="3">[(#ENV{commentaires})]</textarea>
    1616                        </li>
     17                 [(#ENV{id_groupe}|>={100}|oui)
    1718                        <li class="editer_affichage">
    1819                                [<span class="erreur_message">(#ENV**{erreurs}|table_valeur{affichage})</span>]
     
    2021                                <input type="[(#HTML5|?{number,text})]" name="affichage" [value="(#ENV{affichage})"] id="affichage"  class="number integer" />
    2122                        </li>
     23                ]
    2224                </ul>
    2325                <p class="boutons">
  • _plugins_/Association/Associaspip/formulaires/editer_membres_groupe.html

    r59668 r59811  
    1010                                <th><:asso:id:></th>
    1111                                <th><:asso:nom:></th>
    12                                 <th><:asso:fonction:></th>
     12                                [(#ENV{id_groupe}|>={100}|oui)<th><:asso:fonction:></th>]
    1313                                <th><:asso:action:><th>
    1414                        </tr>
     
    1717                                <td>#ID_AUTEUR</td>
    1818                                <td><a title="<:asso:adherent_label_voir_membre:>" href="#URL_ECRIRE{voir_adherent, id=#ID_AUTEUR}">[(#SEXE|association_calculer_nom_membre{#PRENOM, #NOM_FAMILLE}) ]</a></td>
    19                                 <td><input type="text" value="[(#FONCTION)]" name="fonctions[#ID_AUTEUR]" class="text" /></td>
     19                                [(#ENV{id_groupe}|>={100}|oui)<td><input type="text" value="[(#FONCTION)]" name="fonctions[(#ID_AUTEUR)]" class="text" /></td>]
    2020                                <td class="boutons"><a title="<:asso:exclure_du_groupe:>" href="#URL_ACTION_AUTEUR{exclure_du_groupe, #ENV{id_groupe}-#ID_AUTEUR, #SELF}"><img src="#CHEMIN{img_pack/suppr-12.gif}"></a><input type="checkbox" name="id_auteurs[]" value="#ID_AUTEUR" /><td>
    2121                        </tr>
     
    2323                </table>
    2424                <p class="boutons">
    25                         <input type="submit" value="<:pass_ok:>" title="<:asso:ok_edition_groupe:>" class="submit" name="e_submit" />
     25                        [(#ENV{id_groupe}|>={100}|oui)<input type="submit" value="<:pass_ok:>" title="<:asso:ok_edition_groupe:>" class="submit" name="e_submit" />]
    2626                        <input name="s_submit" type="submit" value="<:asso:exclure:>" title="<:asso:supprimer_selectionnes:>" class="submit" />
    2727                </p>
  • _plugins_/Association/Associaspip/lang/asso_fr.php

    r59668 r59811  
    265265        'adherent_message_degrouper' => '<p>S&eacute;lectionner les groupes dont les adh&eacute;rents seront exclus.</p>',
    266266        'titre_voir_groupe' => 'Voir le groupe',
     267
     268# Gestion des autorisations
     269        'gerer_les_autorisations' => 'G&eacute;rer les droits d\'acc&egrave;s',
     270        'les_groupes_dacces' => 'Groupes de droits d\'acc&egrave;s',   
     271        'aide_gerer_autorisations' => 'Pour donner des autorisations, ajouter simplement la personne au groupe ad&eacute;quat. Voir la <a href="http://www.spip-contrib.net/Associaspip#restriction_access">documentation online</a> pour plus de d&eacute;tails.',
     272        # nom des groupes d'autorisations (par ordre croissant d'id_groupe)
     273        'groupe_1' => 'Edition des droits acc&egrave;s',
     274        'groupe_2' => 'Edition des groupes',
    267275# Association (accueil)
    268276        'association_infos_contacts' => 'Profil de l\'association', // information sur l'association (objet, declaration, etc.), ses coordonnees (adresse, numero et email principaux) et les contacts (nom, fonction, numero, email)
  • _plugins_/Association/Associaspip/plugin.xml

    r59694 r59811  
    66        </auteur>
    77        <version>2.1.0</version>
    8         <version_base>58894</version_base>
     8        <version_base>59811</version_base>
    99        <meta>association_metas</meta>
    1010        <etat>dev</etat>
Note: See TracChangeset for help on using the changeset viewer.