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: roller | Tabelnavn: 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:
|