basedb.inc.php 4.93 KB
Newer Older
Ayolo's avatar
Ayolo committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<?php
/* Copyright 2004-2007
 * - Julien Etelain < julien at pmad dot net >
 *
 * Ce fichier fait partie du site de l'Association des Étudiants de
 * l'UTBM, http://ae.utbm.fr.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 */
23

Ayolo's avatar
Ayolo committed
24 25 26
/**
 * @file
 */
27

Ayolo's avatar
Ayolo committed
28
/** @defgroup bdbrights Droits d'accés
29
 * @ingroup stdentity
Ayolo's avatar
Ayolo committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43
 * @{
 */
/** lecture */
define("DROIT_LECTURE",0x1);
/** ecriture */
define("DROIT_ECRITURE",0x2);
/** ajout sous catégorie */
define("DROIT_AJOUTCAT",0x4);
/** ajout élément */
define("DROIT_AJOUTITEM",0x8);
/**
 * @}
 */

44 45
define("DROIT_MASKCAT",0xFFD);
define("DROIT_MASKITEM",0x331);
Ayolo's avatar
Ayolo committed
46 47 48

/**
 * Gère un objet à droits d'accés et modéré
49 50
 * @ingroup stdentity
 * @author Julien Etelain
Ayolo's avatar
Ayolo committed
51
 */
52
abstract class basedb extends stdentity
Ayolo's avatar
Ayolo committed
53
{
Ayolo's avatar
debug  
Ayolo committed
54 55
  /** Id du propriétaire */
  var $id_utilisateur;
56

Ayolo's avatar
debug  
Ayolo committed
57
  /** Id du groupe propriétaire */
58 59
  var $id_groupe;

Ayolo's avatar
debug  
Ayolo committed
60 61
  /** Id du groupe d'administration */
  var $id_groupe_admin;
62 63

  /** Droits d'accés
Ayolo's avatar
debug  
Ayolo committed
64 65 66
   * Ces droits se combinent, et se repértissent sur 3x4 bits
   * 0-4  : Tout le monde (0x0F)
   * 5-8  : Groupe (0x0F0)
67
   * 7-12 : Propriètaire (0xF00)
Ayolo's avatar
debug  
Ayolo committed
68 69 70
   * @see bdbrights
   */
  var $droits_acces;
71

Ayolo's avatar
debug  
Ayolo committed
72 73
  /** Element modéré ou non */
  var $modere;
Ayolo's avatar
Ayolo committed
74 75


76

Ayolo's avatar
debug  
Ayolo committed
77 78 79 80 81 82 83
  /**
   * Instancie un objet à droits d'accés.
   * @param $db Accés à la base de donnés en lecture seule.
   * @param $dbrw Accés à la base de donnés en lecture et ecriture.
   */
  function basedb  ( &$db, &$dbrw = null )
  {
Ayolo's avatar
Ayolo committed
84
    $this->stdentity($db,$dbrw);
Ayolo's avatar
debug  
Ayolo committed
85
  }
86

Ayolo's avatar
debug  
Ayolo committed
87 88 89 90 91 92 93
  /**
   * Détermine si l'utilisateur est administrateur de l'élément
   * @param $user Instance de utilisateur
   */
  function is_admin ( &$user )
  {
    /*if ( $user->is_in_group("gestion_ae")) return true;  Les droits d'admin devrons être mieux découpés */
94

BenC's avatar
BenC committed
95
    if ( $user->is_in_group_id($this->id_groupe_admin) ) return true;
96

Ayolo's avatar
debug  
Ayolo committed
97 98
    return false;
  }
99

Ayolo's avatar
debug  
Ayolo committed
100 101 102 103 104 105 106
  /**
   * Détermine si l'utilisateur a le droit spécifié sur l'élément
   * @param $user Instance de utilisateur
   * @param $required Droit à tester
   */
  function is_right ( &$user, $required )
  {
Bate's avatar
Bate committed
107 108 109 110
    if ( ($this->modere != 0) && (($required & ($this->droits_acces)) == $required) ) return true;

    if(!$user->is_valid()) return false;

Ayolo's avatar
debug  
Ayolo committed
111
    if ( $this->is_admin($user)) return true;
Ayolo's avatar
bleh  
Ayolo committed
112

Ayolo's avatar
debug  
Ayolo committed
113
    if ( !is_null($this->id_utilisateur) &&
114
      ($user->id ==  $this->id_utilisateur) &&
Ayolo's avatar
debug  
Ayolo committed
115
      ($required & ($this->droits_acces >> 8)) == $required ) return true;
Ayolo's avatar
bleh  
Ayolo committed
116

Ayolo's avatar
debug  
Ayolo committed
117
    if ( $this->modere == 0 ) return false;
Ayolo's avatar
bleh  
Ayolo committed
118

119
    if ( ($user->is_in_group_id($this->id_groupe)) &&
Ayolo's avatar
debug  
Ayolo committed
120
      ($required & ($this->droits_acces >> 4)) == $required ) return true;
Ayolo's avatar
bleh  
Ayolo committed
121

Ayolo's avatar
debug  
Ayolo committed
122 123
    return false;
  }
124 125

  /**
Ayolo's avatar
debug  
Ayolo committed
126 127 128 129 130 131 132 133
   * Fait hériter les droits depuis un autre élément.
   * Le propriètaire n'est pas héréditaire !
   * @param $basedb Element servant de base
   * @param $category Déprécié, detection via la fonction $this->is_category()
   */
  function herit ( $basedb, $category=true )
  {
    $this->id_utilisateur = null;
134
    $this->id_groupe = $basedb->id_groupe;
Ayolo's avatar
debug  
Ayolo committed
135 136 137 138 139
    $this->id_groupe_admin = $basedb->id_groupe_admin;
    $this->modere=false;
    if ( $this->is_category() )
      $this->droits_acces = $basedb->droits_acces & DROIT_MASKCAT;
    else
140
      $this->droits_acces = $basedb->droits_acces & DROIT_MASKITEM;
Ayolo's avatar
debug  
Ayolo committed
141
  }
142

Ayolo's avatar
debug  
Ayolo committed
143 144 145 146 147 148 149 150 151 152
  /**
   * Définit les droits d'accés de l'élément (pensez ensuite à enregistrer l'objet)
   * @param $user Instance de l'utilisateur qui fait la modification (sui deviendra propiètaire si aucun n'est défini)
   * @param $rigths Droits
   * @param $id_group Id du groupe propriétaire
   * @param $id_group_admin Id du groupe administrateur (non pris en compte si l'utilisateur n'est pas administrateur)
   * @param $category Déprécié, detection via la fonction $this->is_category()
   */
  function set_rights ( $user,  $rights, $id_group, $id_group_admin, $category=true )
  {
153

Ayolo's avatar
debug  
Ayolo committed
154 155
    if ( $this->is_admin($user) && $id_group_admin )
      $this->id_groupe_admin = $id_group_admin;
156

Ayolo's avatar
debug  
Ayolo committed
157 158
    if ( !$this->id_utilisateur )
      $this->id_utilisateur = $user->id;
159 160 161

    $this->id_groupe = $id_group;

Ayolo's avatar
debug  
Ayolo committed
162 163 164 165 166
    if ( $this->is_category() )
      $this->droits_acces = $rights & DROIT_MASKCAT;
    else
      $this->droits_acces = $rights & DROIT_MASKITEM;
  }
167

Ayolo's avatar
debug  
Ayolo committed
168 169 170 171 172 173
  /** Determine si la classe décrit une catégorie
   * Valeur static
   * @return true is de type catégorie, sinon false
   */
  function is_category()
  {
174
    return true;
Ayolo's avatar
debug  
Ayolo committed
175
  }
176

Ayolo's avatar
Ayolo committed
177 178 179
}


Ayolo's avatar
debug  
Ayolo committed
180
?>