logo    PHP - Simpel logind (roller).




Simpel logind anvendes, når der kun skal kunne anvendes en enkelt eller meget få roller (f.eks. i admin-systemer eller til at købe ved e-handel).


Beskrivelsen nedenfor er relateret til en stand-alone opbygning med flere rollertil et admin-system.


Koden vil dog med mindre tilpasninger kunne anvendes som stand-alone i en kunderelateret opbygning. Endvidere vil den kunne danne grundlag for integreret adgantsstyring i en kunderelateret opbygning.




DB-tableller


Tabelnavn: rollerTabelnavn: brugerstamdata
Indeholder ident og navn på de roller, der skal kunne anvendes i adgangsstyringen.
Identerne skal 'hardcodes' in i de programmer, der skal give adgang til.
Afhængigt af primært brug kan den også f.eks. kaldes 'kundestamdata'.
Tabellen identifierer de brugere, der skal have adgangstilladelse, samt hvilken rolle-ident, der skal give dem denne tilladelse.
Udover de viste minimum-felter kan der tilføjes adressefelter etc. efter behov.




Kode


Koden til login kan se sådan ud:

Da koden som udgangspunkt er beregnet til at være stand-alone omfatter den både en hel HTML-side og tilknyttet CSS. Ved evt. indlejring foretages tilpasning til denne situation.
Anvendelse af 'salt' og 'hash' skal afstemmes med oprettelsen af brugerne i deres stamdata.


<?php
session_start();
ob_start();
include("includes/db_connect.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Login</title>
<style>
#wrapper {
background: limegreen;
width: 400px;
margin: auto;
margin-top: 120px;
padding: 10px;
font-family: verdana;
}

.mellemrum{
width: 10px;
}

.red{
color: red;
background: white;
}

#knap input[type="submit"]:hover {
border: 1px solid #999;
color:#000;}
</style>

</head>
<body>
<div id="wrapper">
<?php
$fejl = "";

if (isset($_POST['submit']))
{
$log_navn = $_POST['log_navn'];
$log_pass = $_POST['log_pass'];

$salt = "2w9nnjtp"; // salt
$log_pass = sha1($log_pass . $salt); //hash

$query = "SELECT * FROM brugerstam
left join roller on roll_ident = fk_roll_ident
WHERE log_navn = '$log_navn' AND log_pass = '$log_pass'";

// echo "<pre>"; echo $query ; echo "</pre>";

$result = mysqli_query($db_link, $query) or die(mysqli_error($db_link));

$antal = mysqli_num_rows($result);
$row = mysqli_fetch_assoc ($result);
if ($antal == 1)
{
$rolle = $row['fk_roll_ident']; //rollens nummer eller anden ident
$roll_navn = $row['roll_navn'];

$_SESSION['rolle'] = $rolle;
header("location: admin/index.php?roll_navn=$roll_navn");
}
else
{
$fejl = '<p class="red">Bruger og / eller password er forkert</p>';
}
} //$_POST slut
?>

<h1>Login til Administration af xxx.dk</h1>
<p><?php echo $fejl; ?></p>
<table>
<form method='post'>
<tr><td>Bruger:</td><td class="mellemrum"></td><td><input type='text' name='log_navn' /></td></tr>
<tr><td>Password:</td><td></td><td><input type='password' name='log_pass' /></td></tr>
<tr><td colspan="3"> </td></tr>
<tr><td> <input type='submit' name='submit' value='Log ind' /></td><td></td><td></td></tr>
</form>
</table>
</div>
</body>
</html>




Kode i adgangsstyrede programmer


I et administrationssystem vil alle programmer typisk være adgangsstyrede. Styrekoden placeres typisk 'så højt oppe som muligt'. På sider med 'include_sidetop' vil det være umiddelbart efter include-koden.


De benyttede rolleidenter i styrekoderne skal tilpasses opsætningen i DB-tabellen ROLLER (Her 1 og 2).


Styrekoderne kan efter behov udvides udvides til at kunne håndtere mere end 2 roller.

Index-programmet


I index-programmet placeres denne styrekode. Den skal give adgang til samtlige rolle-identer og linke tilbage til et program udenfor adgangsbegrænsningen.

include ("includes/sidetop.php");
if($_SESSION['rolle'] != 1 and $_SESSION['rolle'] != 2 )
    {
    header("location:../index.php");
    exit;
    }


I brødteksten på index-siden placeres endvidere denne kode:


<?php
if (isset ($_GET['roll_navn'])) // start GET
{
echo "<br />Du er logget ind med rollen: " . $_GET['roll_navn'] . "<br />";
}
if (isset ($_GET['x'])) // start GET
{
echo "<p class='rod'>Du har ikke adgang til det selekterede program</p>";
}
?
>


I alle øvrige programmer


I alle øvrige programmer indsættes styrekode på samme måde som i index-programmet:


  • Enkelt rolle
    I porgrammer, der skal give angang til en enkelt rolle indsættes denne kode:
    include ("includes/sidetop.php");
    if($_SESSION['rolle'] != 1 )
        {
        header("location: index.php?x=x");
        exit;
        }
  • Flere roller
    I porgrammer, der skal give angang til flere roller (her 2) indsættes denne kode:
  • include ("includes/sidetop.php");
    if($_SESSION['rolle'] != 1 and $_SESSION['rolle] != 2 )
        {
        header("location: index.php?x=x");
        exit;
        }




Default login-vindue


Default login-vinduet ser sådan ud, men kan umiddelbart ombygges efter behov:






















x
x