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
gruppe.php
absgruppen.php
access.php
Test File
Mfg Splasch
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 */
?>
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;
}
}
?>
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;
}
}
?>
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