• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Anfängerfrage: Benutzern Rechte hinzufügen?

Rechte system ist eben nicht gleich Rechte system. Die Steuerung 1 darf das und 2 darf das ist sehr staar.

Hier mal ein Beispiel.
user.php
PHP:
<?php
/**
* User
* @version 1.2
* @author Splasch
* @Filename: user.php
* Benutzer Verwaltung
**/ 
if (0 > version_compare(PHP_VERSION, '5'))
{
 die('Dieses File wurde generiert für PHP 5');
}
class User extends Absgruppen 
{
 protected $user_id = 0;       # Benutzer Nummer
 protected $user_name = '';    # Benutzer Name
 protected $user_mail = '';    # E-Mail Adresse 
 
/**
* User Profil Eigenschaften füllen
* @param $profil array
* @return null
*/
public function __construct($profil)
{
 if(is_array($profil))
 {
  $this->user_id=$profil['id'];
  $this->user_name=$profil['name'];
  $this->user_mail=$profil['mail'];
 }
 return false; 
}
/**
* Neue Gruppe den User hinzufügen
* @param $gruppe Objekt 
* @param $name String
* @return void
*/
public function addGruppe(Gruppe $gruppe,$name)
{
 $this->setGruppe($gruppe,$name); 
}
/**
* Gibt das Angeforderte Gruppen Objekt zurück
* @param $index String
* @return gruppen Objekt
*/
public function getGruppen($index)
{
 return $this->gibGruppe($index); 
}
/**
* Gibt die Namen Aller Gruppen zurück
* @param 
* @return array
*/
public function getGrupNames()
{
 return $this->gibGrupNames(); 
}
} /* end of class User */
?>
gruppe.php
PHP:
<?php
/**
* Gruppe mit Rechten
* @version 1
* @author Splasch
* @Filename: gruppe.php
* Benutzer Verwaltung
**/ 
if (0 > version_compare(PHP_VERSION, '5'))
{
 die('Dieses File wurde generiert für PHP 5');
}
class Gruppe
{
 protected $re_name = array();   # Beschreibungs Name des Zugriffs | Seitenkennung (id) für den Zugriff
 protected $gruppenName;         # Name der Gruppe
/**
* Ladet Gruppen Rechte
* @param $rename Array
* @param $gruppe String
* @return null
*/ 
public function __construct($rename,$gruppe)
{
 $this->re_name=$rename; 
 $this->gruppenName=$gruppe;
}
/**
* Gibt den Gruppenname wieder
* @param  null
* @return String
*/
public function getName()
{
 return $this->gruppenName;
}
/**
* Gibt den Rechte Namen wieder
* @param null
* @return array
*/
public function getRechte()
{
 return $this->re_name;
} 
}
?>
absgruppen.php
PHP:
<?php
/**
* Abstrace Gruppen 
* @version 1.2
* @author Splasch
* @Filename: absgruppen.php
* Benutzer Verwaltung
**/ 
if (0 > version_compare(PHP_VERSION, '5'))
{
 die('Dieses File wurde generiert für PHP 5');
}
abstract class Absgruppen
{
 private $gruppen = array(); # Gruppen Objekte 
 private $allName = array(); # Namen aller Instanzierten Gruppen
 
/**
* Neue Gruppe den User hinzufügen
* @param $gruppe Objekt 
* @param $name String
* @return void
*/ 
abstract public function addGruppe(Gruppe $gruppe,$name); 
/**
* Neues Objekt der Gruppe in Array Speichern und den Gruppen Namen
* @param $gruppe Objekt 
* @param $name String
* @return void
* Nur hinzufügen wenn das Objekt noch nicht vorhanden ist
*/ 
function setGruppe(Gruppe $gruppe,$name)
{
 if(is_object($this->gruppen[$name]))
 {
  echo "Gruppe <b>".$name."</b> schon drin.<br>";
  return;
 }
 $this->gruppen[$name]=$gruppe;
 $this->allName[]=$name;
}
/**
* Gibt das Angeforderte Gruppen Objekt zurück
* @param $index String
* @return gruppen Objekt
*/
function gibGruppe($index)
{
 return $this->gruppen[$index];  
}
/**
* Gibt die Namen Aller Gruppen zurück
* @param 
* @return array
*/
function gibGrupNames()
{
 return $this->allName;  
}
}
?>
access.php
PHP:
<?php
/**
* Access Zugangs Prüfung
* @version 1.1
* @author Splasch
* @File: access.php
* Benutzer Verwaltung
**/ 
if (0 > version_compare(PHP_VERSION, '5'))
{
 die('Dieses File wurde generiert für PHP 5');
}
class Access
{
 
/**
* 
* @param 
* @return null
*/
public function __construct()
{
 
}
/**
* Pürfen ob der Zugriff zur Seite Erlaubt ist
* @param $user Objekt 
* @param $seite String
* @return bolean
*/  
public function zugang(User $user,$seite)
{
 # Session Prüfen
 if (!$this->checkSession())
 {
  return false; 
 }
 foreach ($user->getGrupNames() as $gruppe)
 {
  if (array_key_exists($seite,$user->getGruppen($gruppe)->getRechte()))
  {
   return true;
  }
  #echo "nicht enthalten in: ".$gruppe."<br>";
 }
 return false;
}
/**
* SESSION Prüfen
* @return bolean
*/  
protected function checkSession()
{
 if (!isset($_SESSION["zugang"]) or $_SESSION["zugang"]==""or
     $_SESSION['broswer'] != $_SERVER['HTTP_USER_AGENT']or 
     $_SESSION['ip'] != $_SERVER['REMOTE_ADDR']
    )
 {  
  return false;     
 }
 else
 { 
  # Session Prüfung bestanden  
  return true;
 }
   
}//ende checkSession
/**
* Gibt alle Rechte aus allen Gruppen zurück
* Führt die Rechte zusammen und Filtert doppelte Werte
* @param 
* @return array
*/  
public function alleRechte(User $user)
{
 $rechte=array();
 foreach ($user->getGrupNames() as $gruppe)
 {
  foreach ($user->getGruppen($gruppe)->getRechte() as $key=>$inhalt)
  {
   if(!array_key_exists($key,$rechte))
   {
    $rechte[$key]=$inhalt; 
   }
  }
 } 
 #asort($rechte); 
 return $rechte;
}
/**
* Leitet den Logout ein
* @param 
* @return null
*/  
public function logout()
{
 $pfad=$_SERVER['PHP_SELF'];
 $pfad=dirname ($pfad);
 $pfad=str_replace ( '?',"",$pfad);
 $pfad=str_replace ( '/php',"",$pfad);
 session_unset ();
 session_destroy();
 echo 'Ausgelogt';
 $umleitung =$pfad."/index.php";
 
 header("Location: ".$pfad);
 exit();
}
}
?>

Test File
PHP:
<?php
/**
* TEST
* @version 1.2
* @author Splasch
* @Filename: 
* Benutzer Verwaltung
**/ 
include('config.php');
include('dbpdo.php');
include('gruppe.php');
include('absgruppen.php');
include('user.php');
include('access.php');
#User Dumy Profil
$profil = array("name"=>"Nubon",
                "id"=>"4",
                "mail"=>"[email protected]"
               );
$user = new User($profil);
#Laden der Berechtigungen
 $sql="SELECT 
        grup_id,grup_name,re_name,re_bez 
       FROM 
        admin_gruppen,admin_rechte,gruppen,rechte 
       WHERE 
        f_userid='1' AND
        grup_id=admin_gruppen.f_grupid AND
        admin_gruppen.f_grupid=admin_rechte.f_grupid AND 
        rechte.re_id = admin_rechte.f_reid 
        ORDER by grup_name";
 $obj= new Dbpdo();
 $stmt =Dbpdo::get_db()->query($sql); 
 $gruppe="";
 while ($data = $stmt->fetch(PDO::FETCH_OBJ))
 {
  if($gruppe=="" || $gruppe == $data->grup_name)
  {
   $rechte[$data->re_name]=$data->re_bez;  
   $gruppe=$data->grup_name;
   echo $gruppe."<br>";   
  } 
  else 
  {
   # Alle Rechte der Gruppe geladen 
   $grupobj= new Gruppe($rechte,$gruppe); # Gruppe erstellen
   unset($rechte);
   $user->addGruppe($grupobj,$gruppe); # Gruppe den User zuweisen
   # Weiter Gruppen daten einlesen
   $rechte[$data->re_name]=$data->re_bez;  
   $gruppe=$data->grup_name;
   echo "else:".$gruppe."<br>"; 
  }
 }
 #Letzte Gruppe erstellen falls vorhanden
 if (is_array($rechte))
 {
  $grupobj= new Gruppe($rechte,$gruppe); # Gruppe erstellen
  $user->addGruppe($grupobj,$gruppe); # Gruppe den User zuweisen
  echo "last:".$gruppe."<br>";   
 }

# Test Doppel belegung abfangen 
$user->addGruppe($grupobj,"Support"); # Doppel belegung
echo"<br>Test Objekt Array Zugriff User<br>";
echo $user->getGruppen('Super Admininstrator')->getName()."<br>";   #Gruppen Namen der GGruppe admin ausgeben
var_dump($user->getGruppen('Super Admininstrator')->getRechte());   #Gruppen Rechte der Gruppe admin ausgeben
echo"<br> Rechte von Support<br>";
var_dump($user->getGruppen('Support')->getRechte()); #Gruppen Rechte der Gruppe support ausgeben
echo"<br> Alle Instanzierten Gruppen-Namen<br>";
var_dump($user->getGrupNames());
# Test Seiten Prüfdurchgang
echo"<br>";
/*
foreach ($user->getGrupNames() as $gruppe)
{
 if (array_key_exists("log",$user->getGruppen($gruppe)->getRechte()))
 {
  echo"zugriff erlauben gefunden in der Gruppe: ".$gruppe."<br>";
  break;
 }
 echo "nicht enthalten in: ".$gruppe."<br>";
}
*/
$access = new Access();
if(!$access->zugang($user,"log"))
{
 die('Zugriff auf die Seite Verweigert');
}
echo "Zugang Erlaubt";

?>

Mfg Splasch
 
splasch schrieb:
Die Steuerung 1 darf das und 2 darf das ist sehr staar.

Falls du das Beispiel von sysop meinst: Eigentlich ist diese Steuerung genau das Gegenteil von starr, nämlich maximal flexibel.

Bei dir fehlt zumindest ein CREATE-Statement für das DB-Schema sowie die Dateien dbpdo.php und config.php.

Code:
class User extends Absgruppen

scheint mir etwas seltsam.

Aber wenn wir schon mit sowas anfangen, können wir auch gleich Zend_Acl oder so verlinken.
 
Ich weiß, Du wirst DIch gleich wieder fürchterlich bei mir beschweren oder glauben, dass ich Dir nichts zutraue usw. usf.

Aber ziehst Du eigentlich derzeit auch irgendwas durch? In allen Unterforen trifft man Dich an, wo Du fragst, wie dies und das funktioniert, fast alles sind Fragen, die sich schon manch Experte gestellt hat und die man nicht so einfach beantworten kann, für die man immer Grundwissen braucht. Aber davon scheinst Du noch gar nichts zu haben.

Du solltest aufhören, in alle Bereiche reinschnuppern zu wollen und Dir ein einziges Ziel setzen, was Du wirklich erreichen willst. Zu diesem einen einzigen Thema gibt es genug, was Du lernen kannst und musst. Das solltest Du bis zum Ende durchziehen und auch mit kleinen Schritten anfangen.

Ich weiß ja nicht, ob Du so ein Supertalent bist, das eine Klasse übersprungen hat, so dass Du gleichzeitig HTML, CSS, PHP, MySQL, C++ und was Du noch alles nachgefragt hast, lernen kannst und das dann auch verstehst. Den Eindruck machst Du aber nicht. Du kommst mir vor wie ein normaler Mensch in dem Alter.

Ich hab selbst einen Sohn in Deinem Alter und ich weiß, wie wissbegierig der ist. Er macht jetzt mit Freude Robot Karol und kriegt von mir so die Programmiergrundlagen beigebracht. Irgendwann lernt er dann vielleicht mal HTML&Co. Aber eben immer eines nach dem anderen, sonst hat das alles überhaupt keinen Sinn.

Weißt Du, wir helfen Dir gerne, aber wenn Du an allen Ecken und Enden nachfragst, wie dies und das geht, dann nimmt Dich keiner mehr Ernst. Überleg Dir, was Du am liebsten machen würdest (klein anfangen) und dann leg los. Wir stehen Dir schon zur Seite, aber wenn Du auf drei Baustellen arbeitest, dann klappt das nicht.

Nett gemeinte Grüße,
-Efchen

Efchen, so wie es aussieht kannst du ihn nicht ändern, er wird sowieso weiter Fragen stellen . Und da er sagt das er das Buch bals durch hat, stellt er dann vielleicht sinnvolle Fragen. mfg counter.
 
Zurück
Oben