Acl.class.php

gehe zur Dokumentation dieser Datei
00001 <?php
00002 // ---------------------------------------------------------------------------
00003 // $Id$
00004 // ---------------------------------------------------------------------------
00005 // OpenRat Content Management System
00006 // Copyright (C) 2002-2004 Jan Dankert, jandankert@jandankert.de
00007 //
00008 // This program is free software; you can redistribute it and/or
00009 // modify it under the terms of the GNU General Public License
00010 // as published by the Free Software Foundation; either version 2
00011 // of the License, or (at your option) any later version.
00012 //
00013 // This program is distributed in the hope that it will be useful,
00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 // GNU General Public License for more details.
00017 //
00018 // You should have received a copy of the GNU General Public License
00019 // along with this program; if not, write to the Free Software
00020 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00021 // ---------------------------------------------------------------------------
00022 // $Log$
00023 // Revision 1.9  2007-11-05 20:45:03  dankert
00024 // Neue Methode "getAvailableRights()"
00025 //
00026 // Revision 1.8  2004/12/19 15:20:27  dankert
00027 // Korrektur delete()
00028 //
00029 // Revision 1.7  2004/11/28 19:25:51  dankert
00030 // Anpassen an neue Sprachdatei-Konventionen
00031 //
00032 // Revision 1.6  2004/11/28 11:22:55  dankert
00033 // Speichern einer Berechtigung fuer "alle"
00034 //
00035 // Revision 1.5  2004/11/15 21:02:32  dankert
00036 // Erzeugen einer Bitmaske der Berechtigungsbits
00037 //
00038 // Revision 1.4  2004/11/10 22:45:06  dankert
00039 // Neue Methode: getTrueProperties()
00040 //
00041 // Revision 1.3  2004/05/02 14:41:31  dankert
00042 // Einf?gen package-name (@package)
00043 //
00044 // Revision 1.2  2004/04/30 20:36:25  dankert
00045 // Neu: Freigabe
00046 //
00047 // Revision 1.1  2004/04/24 15:15:12  dankert
00048 // Initiale Version
00049 //
00050 // --------------------------------------------------------------------------- 
00051 
00052 define('ACL_READ'         ,1   );
00053 define('ACL_WRITE'        ,2   );
00054 define('ACL_PROP'         ,4   );
00055 define('ACL_DELETE'       ,8   );
00056 define('ACL_RELEASE'      ,16  );
00057 define('ACL_PUBLISH'      ,32  );
00058 define('ACL_CREATE_FOLDER',64  );
00059 define('ACL_CREATE_FILE'  ,128 );
00060 define('ACL_CREATE_LINK'  ,256 );
00061 define('ACL_CREATE_PAGE'  ,512 );
00062 define('ACL_GRANT'        ,1024);
00063 define('ACL_TRANSMIT'     ,2048);
00064 
00075 class Acl
00076 {
00081      var $aclid;
00082 
00087      var $objectid   = 0;
00088 
00094      var $userid     = 0;
00095 
00101      var $groupid    = 0;
00102 
00107      var $languageid = 0;
00108 
00113      var $languagename = '';
00114 
00120      var $isDefault  = false;
00121 
00126      var $username   = '';
00127 
00132      var $groupname  = '';
00133 
00138      var $read          = true;
00139 
00144      var $write         = false;
00145 
00150      var $prop          = false;
00151 
00156      var $delete        = false;
00157 
00162      var $release       = false;
00163 
00168      var $publish       = false;
00169 
00174      var $create_folder = false;
00175 
00180      var $create_file   = false;
00181 
00186      var $create_link   = false;
00187 
00192      var $create_page   = false;
00193 
00198      var $grant = false;
00199 
00204      var $transmit = false;
00205 
00206 
00211      function Acl( $aclid = 0 )
00212      {
00213           if   ( $aclid != 0 )
00214                $this->aclid = $aclid;
00215      }
00216 
00217 
00221      function load()
00222      {
00223           $db = db_connection();
00224           
00225           $sql = new Sql( 'SELECT {t_acl}.*,{t_user}.name as username,{t_group}.name as groupname,{t_language}.name as languagename'.
00226                           '  FROM {t_acl} '.
00227                           '    LEFT JOIN {t_user}     ON {t_user}.id     = {t_acl}.userid     '.
00228                           '    LEFT JOIN {t_group}    ON {t_group}.id    = {t_acl}.groupid    '.
00229                           '    LEFT JOIN {t_language} ON {t_language}.id = {t_acl}.languageid '.
00230                           '  WHERE {t_acl}.id={aclid}' );
00231 
00232           $sql->setInt('aclid',$this->aclid);
00233           
00234           $row = $db->getRow( $sql->query );
00235           
00236           $this->setDatabaseRow( $row );          
00237 
00238           if   ( intval($this->languageid)==0 )
00239                $this->languagename = lang('GLOBAL_ALL_LANGUAGES');
00240           else $this->languagename = $row['languagename'];
00241           $this->username     = $row['username'    ];
00242           $this->groupname    = $row['groupname'   ];
00243      }
00244 
00245 
00249      function loadRaw()
00250      {
00251           $db = db_connection();
00252           
00253           $sql = new Sql( 'SELECT * '.
00254                           '  FROM {t_acl} '.
00255                           '  WHERE {t_acl}.id={aclid}' );
00256 
00257           $sql->setInt('aclid',$this->aclid);
00258           
00259           $row = $db->getRow( $sql->query );
00260 
00261           $this->setDatabaseRow( $row );          
00262      }
00263 
00264 
00270      function setDatabaseRow( $row )
00271      {
00272           $this->aclid         =   $row['id'];
00273 
00274           $this->write         = ( $row['is_write'        ] == '1' );
00275           $this->prop          = ( $row['is_prop'         ] == '1' );
00276           $this->delete        = ( $row['is_delete'       ] == '1' );
00277           $this->release       = ( $row['is_release'      ] == '1' );
00278           $this->publish       = ( $row['is_publish'      ] == '1' );
00279           $this->create_folder = ( $row['is_create_folder'] == '1' );
00280           $this->create_file   = ( $row['is_create_file'  ] == '1' );
00281           $this->create_page   = ( $row['is_create_page'  ] == '1' );
00282           $this->create_link   = ( $row['is_create_link'  ] == '1' );
00283           $this->grant         = ( $row['is_grant'        ] == '1' );
00284           $this->transmit      = ( $row['is_transmit'     ] == '1' );
00285 
00286           $this->objectid     = intval($row['objectid'  ]);
00287           $this->languageid   = intval($row['languageid']);
00288           $this->userid       = intval($row['userid'    ]);
00289           $this->groupid      = intval($row['groupid'   ]);
00290      }
00291 
00292      function getProperties()
00293      {
00294           return Array( 'read'         => true,
00295                         'write'        => $this->write,
00296                         'prop'         => $this->prop,
00297                         'create_folder'=> $this->create_folder,
00298                         'create_file'  => $this->create_file,
00299                         'create_link'  => $this->create_link,
00300                         'create_page'  => $this->create_page,
00301                         'delete'       => $this->delete,
00302                         'release'      => $this->release,
00303                         'publish'      => $this->publish,
00304                         'grant'        => $this->grant,
00305                         'transmit'     => $this->transmit,
00306                         'is_default'   => $this->isDefault,
00307                         'userid'       => $this->userid,
00308                         'username'     => $this->username,
00309                         'groupid'      => $this->groupid,
00310                         'groupname'    => $this->groupname,
00311                         'languageid'   => $this->languageid,
00312                         'languagename' => $this->languagename,
00313                         'objectid'     => $this->objectid );
00314 
00315      }
00316 
00317 
00318      function getAvailableRights()
00319      {
00320           return array( 'read',
00321                         'write',
00322                         'prop',
00323                         'create_folder',
00324                         'create_file',
00325                         'create_link',
00326                         'create_page',
00327                         'delete',
00328                         'release',
00329                         'publish',
00330                         'grant',
00331                         'transmit' );
00332 
00333      }
00334 
00335 
00339      function getMask()
00340      {
00341           // intval(boolean) erzeugt numerisch 0 oder 1
00342           $this->mask =  ACL_READ;   // immer lesen
00343           $this->mask += ACL_WRITE         *intval($this->write        );
00344           $this->mask += ACL_PROP          *intval($this->prop         );
00345           $this->mask += ACL_DELETE        *intval($this->delete       );
00346           $this->mask += ACL_RELEASE       *intval($this->release      );
00347           $this->mask += ACL_PUBLISH       *intval($this->publish      );
00348           $this->mask += ACL_CREATE_FOLDER *intval($this->create_folder);
00349           $this->mask += ACL_CREATE_FILE   *intval($this->create_file  );
00350           $this->mask += ACL_CREATE_LINK   *intval($this->create_link  );
00351           $this->mask += ACL_CREATE_PAGE   *intval($this->create_page  );
00352           $this->mask += ACL_GRANT         *intval($this->grant        );
00353           $this->mask += ACL_TRANSMIT      *intval($this->transmit     );
00354           Logger::trace('mask of acl'.$this->aclid.': '.$this->mask );
00355           return $this->mask;
00356      }
00357 
00358 
00359      function getTrueProperties()
00360      {
00361           $erg = array('read');
00362           if   ( $this->write         ) $erg[] = 'write';
00363           if   ( $this->prop          ) $erg[] = 'prop';
00364           if   ( $this->create_folder ) $erg[] = 'create_folder';
00365           if   ( $this->create_file   ) $erg[] = 'create_file';
00366           if   ( $this->create_link   ) $erg[] = 'create_link';
00367           if   ( $this->create_page   ) $erg[] = 'create_page';
00368           if   ( $this->delete        ) $erg[] = 'delete';
00369           if   ( $this->release       ) $erg[] = 'release';
00370           if   ( $this->publish       ) $erg[] = 'publish';
00371           if   ( $this->grant         ) $erg[] = 'grant';
00372           if   ( $this->transmit      ) $erg[] = 'transmit';
00373 
00374           return $erg;
00375      }
00376 
00377 
00378      function delete()
00379      {
00380           $db = db_connection();
00381           
00382           $sql = new Sql( 'DELETE FROM {t_acl} '.
00383                           ' WHERE id      = {aclid}   '.
00384                           '   AND objectid= {objectid}' );
00385 
00386           $sql->setInt('aclid'   ,$this->aclid   );
00387           $sql->setInt('objectid',$this->objectid);
00388           
00389           $db->query( $sql->query );
00390           
00391           $this->aclid = 0;
00392      }
00393 
00394 
00395      function add()
00396      {
00397           if   ( $this->delete )
00398                $this->prop = true;
00399 
00400           $db = db_connection();
00401 
00402           $sql = new Sql('SELECT MAX(id) FROM {t_acl}');
00403           $this->aclid = intval($db->getOne($sql->query))+1;
00404           
00405           $sql = new Sql( 'INSERT INTO {t_acl} '.
00406                           ' (id,userid,groupid,objectid,is_write,is_prop,is_create_folder,is_create_file,is_create_link,is_create_page,is_delete,is_release,is_publish,is_grant,is_transmit,languageid)'.
00407                           ' VALUES( {aclid},{userid},{groupid},{objectid},{write},{prop},{create_folder},{create_file},{create_link},{create_page},{delete},{release},{publish},{grant},{transmit},{languageid} )' );
00408 
00409           $sql->setInt('aclid'   ,$this->aclid   );
00410           $sql->setInt('objectid',$this->objectid);
00411           
00412           if   ( intval($this->groupid) == 0 )
00413                $sql->setNull('groupid');
00414           else
00415                $sql->setInt ('groupid',$this->groupid);
00416           
00417           if   ( intval($this->userid) == 0 )
00418                $sql->setNull('userid');
00419           else
00420                $sql->setInt ('userid',$this->userid);
00421 
00422           $sql->setBoolean('is_default'   ,$this->isDefault     );
00423           $sql->setBoolean('prop'         ,$this->prop          );
00424           $sql->setBoolean('write'        ,$this->write         );
00425           $sql->setBoolean('delete'       ,$this->delete        );
00426           $sql->setBoolean('release'      ,$this->release       );
00427           $sql->setBoolean('publish'      ,$this->publish       );
00428           $sql->setBoolean('grant'        ,$this->grant         );
00429           $sql->setBoolean('transmit'     ,$this->transmit      );
00430           $sql->setBoolean('create_folder',$this->create_folder );
00431           $sql->setBoolean('create_file'  ,$this->create_file   );
00432           $sql->setBoolean('create_link'  ,$this->create_link   );
00433           $sql->setBoolean('create_page'  ,$this->create_page   );
00434 
00435           if   ( intval($this->languageid) == 0 )
00436                $sql->setNull('languageid');
00437           else $sql->setInt ('languageid',$this->languageid);
00438 
00439           $db->query( $sql->query );
00440      }
00441 
00442 
00443 //   function getACLsFromUserId( $userid )
00444 //   {
00445 //        $db = db_connection();
00446 //        
00447 //        $sql = new Sql( 'SELECT id FROM {t_acl} '.
00448 //                        '  WHERE userid={userid}');
00449 //        $sql->setInt('userid',$userid);
00450 //
00451 //        return $db->getCol( $sql->query );
00452 //   }
00453 //
00454 //
00455 //   function getACLsFromGroupId( $groupid )
00456 //   {
00457 //        $db = db_connection();
00458 //        
00459 //        $sql = new Sql( 'SELECT id FROM {t_acl} '.
00460 //                        '  WHERE groupid={groupid}' );
00461 //        $sql->setInt('groupid',$groupid);
00462 //
00463 //        return $db->getCol( $sql->query );
00464 //   }
00465 }

Erzeugt am Thu May 14 00:55:48 2009 für OpenRat von  doxygen 1.5.8