Zugangsbeschränkung integrieren

In diesem Kapitel wollen wir eine Zugangsbeschränkung abfragen. Sprich die Möglichkeit, dass man sich mit Nutzer-ID und Kennwort einloggt und dann andere Möglichkeiten hat, wie normale Nutzer. Dies wollen wir dann in unser Datenverwaltungstool integrieren. Hier wollen wir 3 Varianten haben.

  • Ein normaler Nutzer, der weder ändern noch löschen kann
  • Ein Pfleger, der ändern kann
  • Ein Chefzugang, der alles kann

Um es Übersichtlicher zu haben, legen wir uns eine neue Seite an. Später wird das Einloggen auch in den anderen Bereichen integriert.

Unsere neue Seite bekommt von mir den Namen: einloggen-beispiel.php

Inhaltlich wollen wir natürlich unseren Kopf und Fuß mit unserem neuen Design. Dazu benötigen wir nicht viel außer unsere bereich-kopf.inc.php und bereich-fuss.inc.php.

Da wir auf jeden Fall einen Datenbankzugriff benötigen, wird die Verbindung zur Datenbank aufgebaut:

<?php
require_once 'inc/db.php';
require_once 'inc/bereich-kopf.inc.php';

require_once 'inc/bereich-fuss.inc.php';
?>

Wenn wir noch nicht eingeloggt sind, benötigen wir ein Formular. Im ersten Schritt platzieren wir diese noch im Inhaltsbereich – später dann im Kopf.

<?php
require_once 'inc/db.php';
require_once 'inc/bereich-kopf.inc.php';
?>
<form action="" method="post">
    <label>Nutzer-ID:
        <input type="text" name="nutzerid" id="nutzerid">
    </label><br>
    <label>Kennwort:
        <input type="text" name="kennwort" id="kennwort">
    </label><br>
    <input type="hidden" name="aktion" value="einloggen">
    <input type="submit" value="einloggen">
</form>
<?php
require_once 'inc/bereich-fuss.inc.php';
?>

Jetzt können wir am Anfang abfragen, ob eine Eingabe in diesem Formular vorliegt und ob sowohl Nutzer-ID wie auch Kennwort angegeben ist:

<?php
require_once 'inc/db.php';
require_once 'inc/bereich-kopf.inc.php';
if ( isset($_POST['aktion']) and $_POST['aktion'] == 'einloggen' )
{
    if ( isset($_POST['nutzerid']) and trim($_POST['nutzerid']) != '' 
         and 
         isset($_POST['kennwort']) and trim($_POST['kennwort']) != '' 
       )
    {
        // überprüfen, ob Zugangsdaten korrekt sind
    }
    else 
    {
        echo "<p>Bitte Formular komplett ausfüllen</p>";
    }
}
?>

Das überprüfen werden wir im ersten Schritt anhand von festen Werten machen und später anhand von Auslesen der Datenbank. So ist das Verständnis einfacher möglich.

Wir überprüfen, ob als Nutzer-ID entweder „Chef“ oder „Abteilungsleiter“ angegeben wurde und als Kennwort dann „geheim“ bzw. „geheimer“.

if ( isset($_POST['aktion']) and $_POST['aktion'] == 'einloggen' )
{
    if ( isset($_POST['nutzerid']) and trim($_POST['nutzerid']) != '' 
         and 
         isset($_POST['kennwort']) and trim($_POST['kennwort']) != '' 
       )
    {
        // überprüfen, ob Zugangsdaten korrekt sind
        if ( trim($_POST['nutzerid']) == 'Chef' 
             and trim($_POST['kennwort']) == 'geheimer'
           )
        {
            echo "<p>Eingeloggt als Chef</p>";
        }
        elseif ( trim($_POST['nutzerid']) == 'Abteilungsleiter' 
             and trim($_POST['kennwort']) == 'geheim'
           )
        {
            echo "<p>Eingeloggt als Abteilungsleiter</p>";          
        }
        else
        {
            echo "<p>Bitte korrekte Zugangsdaten eingeben!</p>";
        }       
    }
    else 
    {
        echo "<p>Bitte Formular komplett ausfüllen</p>";
    }
}
?>

Die Überprüfung (später dann anhand des Abgleichs über die Datenbank) funktioniert bereits. Allerdings sollten wir uns das Ergebnis noch merken und entsprechend darauf reagieren.

Hier kommt wieder unsere SESSION-Technik zum Einsatz. Das starten der SESSION ist bereits dadurch geschehen, dass wir am Anfang unseres PHP-Skriptes die Datei „db.php“ dazu geladen haben. Dort steckt gleich am Anfang der Aufruf session_start();. Die Grundvoraussetzung für die Nutzung der SESSIONs ist also schon erfüllt.

<?php
require_once 'inc/db.php';

Jetzt wollen wir die Nutzer-ID und die Zugriffsrechte in der SESSION speichern.

if ( isset($_POST['aktion']) and $_POST['aktion'] == 'einloggen' )
{
    if ( isset($_POST['nutzerid']) and trim($_POST['nutzerid']) != '' 
         and 
         isset($_POST['kennwort']) and trim($_POST['kennwort']) != '' 
       )
    {
        // überprüfen, ob Zugangsdaten korrekt sind
        if ( trim($_POST['nutzerid']) == 'Chef' 
             and trim($_POST['kennwort']) == 'geheimer'
           )
        {
            echo "<p>Eingeloggt als Chef</p>";
            $_SESSION['eingeloggt']['nutzerid'] = 'Chef';
            $_SESSION['eingeloggt']['rechte']   = 'alles';          
        }
        elseif ( trim($_POST['nutzerid']) == 'Abteilungsleiter' 
             and trim($_POST['kennwort']) == 'geheim'
           )
        {
            echo "<p>Eingeloggt als Abteilungsleiter</p>";
            $_SESSION['eingeloggt']['nutzerid'] = 'Abteilungsleiter';
            $_SESSION['eingeloggt']['rechte']   = 'datenpflege';
        }
        else
        {
            echo "<p>Bitte korrekte Zugangsdaten eingeben!</p>";
            unset ($_SESSION['eingeloggt']['nutzerid']);
            unset ($_SESSION['eingeloggt']['rechte']);
        }       
    }
    else 
    {
        echo "<p>Bitte Formular komplett ausfüllen</p>";
    }
}

Jetzt können wir innerhalb unseres Programmes auf diese SESSIONs zugreifen. Nachdem wir erfolgreich eingeloggt sind, benötigen wir kein Formular mehr!

if ( ! isset($_SESSION['eingeloggt']['rechte']) )
{
?>
<form action="" method="post">
    <label>Nutzer-ID:
        <input type="text" name="nutzerid" id="nutzerid">
    </label><br>
    <label>Kennwort:
        <input type="text" name="kennwort" id="kennwort">
    </label><br>
    <input type="hidden" name="aktion" value="einloggen">
    <input type="submit" value="einloggen">
</form>
<?php
}
require_once 'inc/bereich-fuss.inc.php';
?>

Anstelle des Formulars benötigen wir die Möglichkeit, uns wieder auszuloggen.

if ( ! isset($_SESSION['eingeloggt']['rechte']) )
{
?>
<form action="" method="post">
    <label>Nutzer-ID:
        <input type="text" name="nutzerid" id="nutzerid">
    </label><br>
    <label>Kennwort:
        <input type="text" name="kennwort" id="kennwort">
    </label><br>
    <input type="hidden" name="aktion" value="einloggen">
    <input type="submit" value="einloggen">
</form>
<?php
}
else
{
?>
<form action="" method="post">
    <input type="hidden" name="aktion" value="ausloggen">
    <input type="submit" value="ausloggen">
</form>
<?php
} 
require_once 'inc/bereich-fuss.inc.php';
?>

Ganz am Anfang von unserem PHP-Programm kommt also folgender Code für das ausloggen:

<?php
require_once 'inc/db.php';
require_once 'inc/bereich-kopf.inc.php';

if ( isset($_POST['aktion']) and $_POST['aktion'] == 'ausloggen' )
{
    echo "<p>Sie wurden ausgeloggt</p>";
    unset ($_SESSION['eingeloggt']['nutzerid']);
    unset ($_SESSION['eingeloggt']['rechte']);  
}

Als Information können wir im Fußbereich die Nutzer-ID und die Rechte ausgeben. Dass muß man natürlich in einer normalen Anwendung nicht unbedingt machen – hilft aber hier, um den aktuellen Status sofort zu sehen.

Sprich wir schnappen uns den Programmteil „bereich-fuss.inc.php“ – jetzt wird auch klar, warum auch hier die Endung „.php“ verwendet wurde.

</div>
<footer>
    <p>Beispielprogramm www.PHP-Kurs.com
<?php
if ( isset($_SESSION['eingeloggt']['nutzerid']) ) {
    echo " | ". $_SESSION['eingeloggt']['nutzerid'];
    echo " (". $_SESSION['eingeloggt']['rechte'] .")";      
}
?>
    </p>
</footer>
</div>
</body>
</html>