මොඩියුලය 9

පරිශීලක (User) සහ කාර්යභාර (Role) කළමනාකරණය


1 භූමිකාව-මත-පදනම් වූ ප්‍රවේශ පාලනය (RBAC)

Role-Based Access Control (RBAC) යනු පද්ධතියක ආරක්ෂාව තහවුරු කරන ප්‍රධාන ක්‍රමවේදයකි. මෙහිදී, සෑම පරිශීලකයෙකුටම කාර්යභාරයක් (role) පවරනු ලබන අතර, එම කාර්යභාරය මත පදනම්ව ඔහුට හෝ ඇයට ප්‍රවේශ විය හැකි පිටු සහ ක්‍රියාකාරකම් තීරණය වේ.

අපගේ පද්ධතියේ ප්‍රධාන කාර්යභාර දෙකකි:

  • 👨‍💼 Admin (පරිපාලක): සියලුම ක්‍රියාකාරකම් සඳහා පූර්ණ ප්‍රවේශය ඇත. (නිෂ්පාදන, පරිශීලකයින්, වාර්තා කළමනාකරණය, POS).
  • 🛒 Cashier (අයකැමි): ප්‍රවේශය POS (බිල්පත්) පිටුවට පමණක් සීමා වේ. ඔවුන්ට වාර්තා බැලීමට හෝ නිෂ්පාදන කළමනාකරණය කිරීමට නොහැක.
2 සෙෂන් කාර්යභාර (Session Roles) භාවිතයෙන් පිටු සීමා කිරීම

පරිශීලකයෙක් ලොග් වූ විට, ඔහුගේ කාර්යභාරය (`role`) අපි සෙෂන් විචල්‍යයක (`$_SESSION['role']`) ගබඩා කළෙමු. දැන්, පරිපාලක සඳහා පමණක් වන සෑම පිටුවකම (උදා: `products.php`, `reports.php`, `inventory.php`) ආරම්භයේදීම මෙම සෙෂන් විචල්‍යය පරීක්ෂා කළ යුතුය.

ආරක්ෂක කේතය:

මෙම PHP කේතය admin-only පිටුවල ඉහළින්ම යොදන්න.

<?php session_start(); // Check if user is logged in if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) { header("location: login.php"); exit; } // Check if user is an admin if ($_SESSION["role"] !== 'admin') { // If not admin, show an error or redirect to their allowed page (e.g., POS) die("Access Denied: You do not have permission to view this page."); // or header("location: pos.php"); exit; } ?>

⭐ ප්‍රායෝගික පැවරුම: "පරිශීලක කළමනාකරණ" පිටුව නිර්මාණය කර, කාර්යභාර සීමා කිරීම් පරීක්ෂා කිරීම

මෙම කාර්යයේදී, පරිශීලකයින් සඳහා සම්පූර්ණ CRUD ක්‍රියාවලියක් සහිත පිටුවක් නිර්මාණය කර, අප විසින් සකස් කළ ආරක්ෂක ක්‍රමවේදය පරීක්ෂා කර බලමු.

පියවර 1: `users.php` ගොනුව නිර්මාණය කිරීම

මෙය පරිපාලක සඳහා පමණක් වන පිටුවකි. මෙහිදී නව පරිශීලකයින් එකතු කිරීමට ෆෝරමයක් සහ පවතින පරිශීලකයින්ගේ ලැයිස්තුවක් පෙන්වයි.

<?php // users.php // Place the security check code from above here include 'includes/db_connect.php'; // Handle form submission (add/edit user) if ($_SERVER['REQUEST_METHOD'] == 'POST') { $name = $_POST['name']; $email = $_POST['email']; $role = $_POST['role']; $password = password_hash($_POST['password'], PASSWORD_DEFAULT); // Always hash passwords! // SQL to INSERT new user // ... } // Fetch all users to display $result = mysqli_query($conn, "SELECT id, name, email, role FROM users"); ?> <!DOCTYPE html> <html> <head><title>Manage Users</title><!-- Bootstrap CSS --></head> <body> <div class="container"> <h1>Manage Users</h1> <!-- Form to add a new user (fields: name, email, password, role dropdown) --> <h3 class="mt-5">Existing Users</h3> <table class="table table-bordered"> <thead><tr><th>ID</th><th>Name</th><th>Email</th><th>Role</th><th>Actions</th></tr></thead> <tbody> <?php while($row = mysqli_fetch_assoc($result)): ?> <tr> <td><?php echo $row['id']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['email']; ?></td> <td><span class="badge bg-<?php echo $row['role'] == 'admin' ? 'success' : 'secondary'; ?>"><?php echo $row['role']; ?></span></td> <td> <a href="#" class="btn btn-sm btn-primary">Edit</a> <!-- An admin should not be able to delete their own account --> <?php if ($_SESSION['id'] != $row['id']): ?> <a href="delete_user.php?id=<?php echo $row['id']; ?>" class="btn btn-sm btn-danger">Delete</a> <?php endif; ?> </td> </tr> <?php endwhile; ?> </tbody> </table> </div> </body> </html>

පියවර 2: කාර්යභාර සීමා කිරීම් පරීක්ෂා කිරීම

  1. නව අයකැමි (Cashier) ගිණුමක් සාදන්න: `users.php` පිටුවට ගොස්, `role` එක 'cashier' ලෙස තෝරා නව පරිශීලකයෙක් සාදන්න. (උදා: email: cashier@supermarket.com, password: cashier123).
  2. Admin ගිණුමෙන් ලොග්අවුට් වන්න.
  3. Cashier ගිණුමෙන් ලොග් වන්න: ඔබ දැන් සෑදූ cashier ගිණුමේ තොරතුරු භාවිතා කර `login.php` හරහා පද්ධතියට පිවිසෙන්න.
  4. ප්‍රවේශය පරීක්ෂා කරන්න: දැන්, බ්‍රව්සරයේ ලිපින තීරුවේ (address bar) admin-only පිටුවක ලිපිනයක් ටයිප් කර පිවිසීමට උත්සාහ කරන්න. (උදා: `http://localhost/supermarket/products.php` හෝ `http://localhost/supermarket/reports.php`).

ඔබ ඉහත ආරක්ෂක කේතය නිවැරදිව යොදා ඇත්නම්, ඔබට "Access Denied" පණිවිඩය දිස්විය යුතුය, නැතහොත් ඔබව වෙනත් පිටුවකට යොමු කළ යුතුය. Cashier ගිණුමෙන් `pos.php` වෙත සාර්ථකව පිවිසිය හැකි දැයි තහවුරු කරගන්න. එසේ නම්, ඔබ මෙම මොඩියුලය සාර්ථකව නිම කර ඇත!

‹‹ පෙර මොඩියුලය (Module 8) ඊළඟ මොඩියුලය (Module 10) ››