openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 974c07b7cee16f69cfbb6bccacfaabbfa3a83a6c
parent 4bcca55223ad872bf6ce75612443896c8f05e5b3
Author: dankert <devnull@localhost>
Date:   Wed, 10 Nov 2004 23:48:25 +0100

Neue Methoden zum Einlesen der Berechtigungen

Diffstat:
objectClasses/User.class.php | 122++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
1 file changed, 99 insertions(+), 23 deletions(-)

diff --git a/objectClasses/User.class.php b/objectClasses/User.class.php @@ -20,7 +20,10 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // --------------------------------------------------------------------------- // $Log$ -// Revision 1.4 2004-10-14 21:12:59 dankert +// Revision 1.5 2004-11-10 22:48:25 dankert +// Neue Methoden zum Einlesen der Berechtigungen +// +// Revision 1.4 2004/10/14 21:12:59 dankert // Methoden fuer Berechtigungen // // Revision 1.3 2004/05/07 21:29:16 dankert @@ -51,6 +54,8 @@ class User var $desc; var $style; var $isAdmin; + var $projects; + var $rights; // Konstruktor @@ -159,7 +164,8 @@ class User ' FROM {t_acl}'. ' LEFT JOIN {t_object} ON {t_object}.id={t_acl}.objectid '. ' WHERE userid={userid} OR'. - ' '.$this->getGroupClause() ); + ' '.$this->getGroupClause(). + ' ORDER BY {t_project}.name' ); $sql->setInt ( 'userid',$this->userid ); return $db->getCol( $sql->query ); @@ -167,6 +173,11 @@ class User } + function loadProjects() + { + $this->projects = $this->getReadableProjects(); + } + // Lesen Benutzer aus der Datenbank function load() @@ -517,6 +528,60 @@ class User } + function loadRights( $projectid,$languageid ) + { + Logger::debug( 'Lade Berechtigungen' ); + + $this->delRights(); + + global $SESS,$conf_php; + $db = db_connection(); + + $group_clause = $this->getGroupClause(); + + $sql = new Sql( 'SELECT {t_acl}.* FROM {t_acl}'. + ' LEFT JOIN {t_object} '. + ' ON {t_object}.id={t_acl}.objectid '. + ' WHERE projectid={projectid}'. + ' AND ( languageid={languageid} OR languageid IS NULL )'. + ' AND ( {t_acl}.userid={userid} OR '.$group_clause .')' ); + $sql->setInt ( 'languageid',$languageid ); + $sql->setInt ( 'projectid' ,$projectid ); + $sql->setInt ( 'userid' ,$this->userid ); + Logger::debug( 'sql='.$sql->query ); + foreach( $db->getAll( $sql->query ) as $row ) + { + Logger::debug( 'aclid '.$row['id'] ); + $objectid = $row['objectid']; + + $acl = new Acl(); + $acl->setDatabaseRow( $row ); + foreach( $acl->getTrueProperties() as $type ) + $this->addRight($objectid,$type); + + // Vererben der Berechtigung an Unterordner + if ( $acl->transmit ) + { + $f = new Folder( $o->parentid ); + foreach( $f->getAllSubfolderIds as $sfid ) + foreach( $acl->getTrueProperties() as $type ) + $this->addRight($sfid,$type); + } + + // Uebergeordneten Ordnern das Leserecht geben + $o = new Object( $objectid ); + $o->objectLoadRaw(); + if ( !$o->isRoot ) + { + $f = new Folder( $o->parentid ); + $oids = $f->parentObjectIds( true, true ); + foreach( $oids as $oid ) + $this->addRight($oid,'read'); + } + } + } + + // Alle Berechtigungen ermitteln function getRights() { @@ -575,29 +640,40 @@ class User } + function delRights() + { + $this->rights = array(); + } + + // Berechtigung dem Benutzer hinzufuegen - function addRight( $data ) + function addRight( $objectid,$type ) { - global $REQ,$SESS; - $db = db_connection(); - - $sql = new SQL('INSERT INTO {t_acl} '. - '(userid,groupid,folderid,`read`,`write`,`create`,`delete`,publish) '. - 'VALUES({userid},{groupid},{folderid},{read},{write},{create},{delete},{publish})'); - - $sql->setInt ('userid',$this->userid); - $sql->setNull('groupid'); - $sql->setInt ('projectid',$SESS['projectid']); - $sql->setInt ('folderid',$data['folderid']); - - $sql->setInt ('read' ,$data['read' ]); - $sql->setInt ('write' ,$data['write' ]); - $sql->setInt ('create' ,$data['create' ]); - $sql->setInt ('delete' ,$data['delete' ]); - $sql->setInt ('publish',$data['publish']); - - // Datenbankabfrage ausf?hren - $db->query( $sql->query ); + if ( !isset($this->rights[$objectid]) ) + $this->rights[$objectid] = array(); + + $this->rights[$objectid][$type] = true; + Logger::trace( 'Objekt '.$objectid.' erhaelt Recht '.$type ); +// global $REQ,$SESS; +// $db = db_connection(); +// +// $sql = new SQL('INSERT INTO {t_acl} '. +// '(userid,groupid,folderid,`read`,`write`,`create`,`delete`,publish) '. +// 'VALUES({userid},{groupid},{folderid},{read},{write},{create},{delete},{publish})'); +// +// $sql->setInt ('userid',$this->userid); +// $sql->setNull('groupid'); +// $sql->setInt ('projectid',$SESS['projectid']); +// $sql->setInt ('folderid',$data['folderid']); +// +// $sql->setInt ('read' ,$data['read' ]); +// $sql->setInt ('write' ,$data['write' ]); +// $sql->setInt ('create' ,$data['create' ]); +// $sql->setInt ('delete' ,$data['delete' ]); +// $sql->setInt ('publish',$data['publish']); +// +// // Datenbankabfrage ausf?hren +// $db->query( $sql->query ); }