Rechte eines users einer abteilung auslesen

danielray

Grünschnabel
hi community,

ich verzweifle an einem array. ich lass das ganze blabla und geheule und fang gleich direkt mit der frage an.
erst aber, ein einblick:

tabelle: permissions
|user_id| |departmend_id| |permissionlevel|
1 1 2
1 2 4
...
...

Code:
    private function getUserPermissions() {
            $checklogin = $this->connection->query("SELECT departmend_id, permissionlevel FROM permissions WHERE user_id = '".$_SESSION['user_id']."';");

-----> und hier hab ich das problem <-----

    }

ich möchte gerne eine $_SESSION['user_permission'] registrieren, die die departmend_id und das dazugehörige permissionlevel abspeichert (aus der DB).
ca. so:
|1||2|
|2||4|

ich habs nun denk ich seit 5h versucht, google, forum suche, ALLES... fetch all(), fetch array(); ich bin einfach zu dumm dafür.

bitte um input!

mfg patrick
 
häh?

Wenn du in $_SESSION['user_permission'] zwei Werte speicchern willst, kannst du es zB so machen:
PHP:
$_SESSION['user_permission'] = array('WertA', 'WertB');

Dein Datenbankproblem versteh ich jetzt nicht? Das ist doch eigentlich was völlig triviales. Da du sogar objektorientiert arbeitest, sollte es wohl kein Problem sein, ein Datenbank resultset entgegen zu nehmen und zu verarbeiten. Abgesehen davon: Selbst wenn wir dir dabei helfen wollten, könnten wir nicht, da wir das Objekt, das sich hinter $connection verbirgt nicht kennen.
 
Was passiert, wenn den Code folgendermaßen aufbaust:

PHP:
    private function getUserPermissions() {
            $checklogin = $this->connection->query("SELECT departmend_id, permissionlevel FROM permissions WHERE user_id = '".$_SESSION['user_id']."';");

            var_dump( $checklogin );
    }

Wenn du die Ausgabe davon postest, kann man dir bestimmt weiter helfen.
 
der ganze code sieht folgendermaßen aus:

Userdata.class.php

Code:
<?php

class UserData {
    private     $connection                 = null;               	        // database connection  
	public		$view_user_vorname 			= "";							//user's vorname
	public		$user_departmend_id			= array();						//user's departmend
    public      $errors                     = array();           	      	// collection of error messages
    public      $messages                   = array();           	        // collection of success / neutral messages

    public function __construct(Database $db) {
			$this->connection = $db->getDatabaseConnection();
        if ($this->connection && isset($_SESSION['user_id'])) {             // check for database connection
			$this->getUserData();
			$this->getUserPermissions();
		}																	
	}
	
    private function getUserData() {
            $checklogin = $this->connection->query("SELECT * FROM members WHERE user_id = '".$_SESSION['user_id']."';");
                $result_row = $checklogin->fetch_object();
                if ($result_row) {
					$this->view_user_vorname = $result_row->user_vorname;
					$this->view_user_nachname = $result_row->user_nachname;
				} else {
                    $this->errors[] = "Es ist ein Fehler aufgetreten. Konnte User nicht in der Datenbank finden.";
                    return false;  
                }   
    }
	
    private function getUserPermissions() {
            $checklogin = $this->connection->query("SELECT departmend_id, permissionlevel FROM permissions WHERE user_id = '".$_SESSION['user_id']."';");
						while ($result_row = $checklogin->fetch_all()) {
							$this->user_departmend_id = array();
							$this->user_permission = array();
								foreach($result_row as $var){
									array_push($this->user_departmend_id,$var[0]);
									array_push($this->user_permission,$var[1]);
								}
							$_SESSION['user_permission'] = array($this->user_departmend_id, $this->user_permission);
						}
    }
}

Database.class.php

Code:
<?php
class Database
{
    private $connection = null;

    public function __construct()
    {
        if (!$this->connection) {
            $this->connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);                        
            return (!$this->connection->connect_errno ? true : false);
        }
    }

    public function getDatabaseConnection()
    {
        return $this->connection;
    }
   
    public function getDatabaseError()
    {
        return $this->connection->connect_errno;
    }
}


wie ihr seht, hab ich das Problem zwar wie folgt gelöst (irgendwann um 5 Uhr in der früh):

Code:
    private function getUserPermissions() {
            $checklogin = $this->connection->query("SELECT departmend_id, permissionlevel FROM permissions WHERE user_id = '".$_SESSION['user_id']."';");
						while ($result_row = $checklogin->fetch_all()) {
							$this->user_departmend_id = array();
							$this->user_permission = array();
								foreach($result_row as $var){
									array_push($this->user_departmend_id,$var[0]);
									array_push($this->user_permission,$var[1]);
								}
							$_SESSION['user_permission'] = array($this->user_departmend_id, $this->user_permission);
						}
    }

wobei mir das array_push() nicht besonders gefällt. und ich weiß, dass ich
Code:
							$this->user_departmend_id = array();
							$this->user_permission = array();
in die class ganz oben schreiben kann (public $user_departmend_id = array();) - war mal nur ein test.

ergebnis:
Code:
array(2) { [0]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } [1]=> array(2) { [0]=> string(1) "5" [1]=> string(1) "6" } }

@saftmeister:
object(mysqli_result)#6 (5) { ["current_field"]=> int(0) ["field_count"]=> int(2) ["lengths"]=> NULL ["num_rows"]=> int(2) ["type"]=> int(0) }


Dein Datenbankproblem versteh ich jetzt nicht? Das ist doch eigentlich was völlig triviales. Da du sogar objektorientiert arbeitest, sollte es wohl kein Problem sein, ein Datenbank resultset entgegen zu nehmen und zu verarbeiten. Abgesehen davon: Selbst wenn wir dir dabei helfen wollten, könnten wir nicht, da wir das Objekt, das sich hinter $connection verbirgt nicht kennen.

entweder bin ich noch nicht ausgeschlafen (ja, bin ich nicht) - und ich verstehs grad nicht so recht, oder ich checks allgemein nicht. die resultate aus ner DB schaffe ich ohne probleme, wenn result=1, aber wenn n->userids n->rechte haben, dann wirds schwer, weil es dann ja mehr zeilen, rows=n gibt.
 
Zuletzt bearbeitet:
Ok, mal langsam: ich brauch immer etwas länger, um es zu verstehen, was jemand erreichen will.

Du willst zu jeder departmend_id den permissionlevel des Users aus der Session ablegen. Das heißt, du musst die beiden Daten irgendwie in Relation setzen. Sie auf zwei Arrays zu verteilen halte ich für ungeeignet, da man die beiden Array getrennt von einander manipulieren kann (Elemente einfügen, rausnehmen, sortieren, usw). Du solltest die ein einziges Array bauen, bei dem die beiden Werte zusammen abgelegt werden. Zum Beispiel so:

PHP:
    private function getUserPermissions() {
            $checklogin = $this->connection->query("SELECT departmend_id, permissionlevel FROM permissions WHERE user_id = '".$_SESSION['user_id']."';");
            $permissions = array();
            while ($result_row = $checklogin->fetch_row()) {
                      $permissions[] = array( $result_row[0] => $result_row[1] );
            }
            $_SESSION['user_permission'] = $permissions;

            // nur zum testen ob das gwünschte drin ist:
            var_dump( $_SESSION['user_permission'] );
    }

Dann kannst du prima über das Array in der Session loopen:

PHP:
foreach( $_SESSION['user_permission'] as $departmend_id => $permissionlevel )
{
  // Mach was mit der aktuellen departmend_id und dem aktuellen permissionlevel
}

Kommt das ungefähr an das, was du haben willst?
 
sql.pngIch versuchs noch mal zu erklären (nicht mein stärke - wirrwarr im kopf):

eine user_id kann zu einer departmend_id eine permission_id haben
die gleiche user_id kann zu einer anderen departmend_id eine andere permission_id haben

Ich -> Abteilung 1 -> R
Ich -> Abteilung 2 -> R
Ich -> Abteilung 3 -> A
Ich -> Abteilung 4 -> W
Du -> Abteilung 1 -> W
Du -> Abteilung 10 ->W
Er -> Abteilung 1 -> A
....

es sollte eine session_array angelegt werden, für den eingeloggten user (id ist in einer session), in der dann aufgelistet ist, für felche abteilung er welche berechtigung hat.

ich teste mal deinen code, danke :)

edit:
Code:
array(2) { [0]=> array(1) { [3]=> string(1) "5" } [1]=> array(1) { [4]=> string(1) "6" } }

sieht gut aus, jede zeile beinhaltet die departmend_id und dem dazugehörigen permissionlevel. :)
 
Zuletzt bearbeitet:
Zurück