|
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. |
![]() | ![]() |
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> |
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.
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 indsættes styrekode på samme måde som i index-programmet:
include ("includes/sidetop.php"); if($_SESSION['rolle'] != 1 ) { header("location: index.php?x=x"); exit; } |
include ("includes/sidetop.php"); if($_SESSION['rolle'] != 1 and $_SESSION['rolle] != 2 ) { header("location: index.php?x=x"); exit; } |
Default login-vinduet ser sådan ud, men kan umiddelbart ombygges efter behov: