Cara menggunakan PHP untuk melaksanakan fungsi kawalan kebenaran peranan sistem CMS
Apabila membangunkan sistem CMS, selalunya perlu untuk melaksanakan fungsi kawalan kebenaran peranan untuk memastikan pengguna yang berbeza hanya boleh mengakses halaman dan fungsi yang mereka gunakan. mendapat kebenaran. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi kawalan kebenaran peranan tersebut dan melampirkan contoh kod.
Pertama, kita perlu mereka bentuk jadual pangkalan data untuk menyimpan maklumat peranan dan kebenaran pengguna. Tiga jadual boleh dibuat: pengguna, peranan dan kebenaran.
Berikut ialah contoh reka bentuk jadual pangkalan data:
jadual pengguna:
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `role_id` int(11) NOT NULL, PRIMARY KEY (`id`) );
jadual peranan:
CREATE TABLE `roles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
jadual kebenaran:
CREATE TABLE `permissions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_id` int(11) NOT NULL, `page` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
<?php // 获取当前登录用户的角色ID $role_id = getCurrentUserRole(); // 获取当前页面的路径 $page = $_SERVER['REQUEST_URI']; // 验证用户权限 if (!checkUserPermission($role_id, $page)) { echo "您没有权限访问该页面!"; exit; } // 其他页面逻辑... ?>
Seperti yang anda lihat, dalam contoh di atas, kami mula-mula mendapat ID peranan pengguna yang sedang log masuk dan mendapatkan laluan halaman semasa. Kemudian, panggil fungsi checkUserPermission untuk mengesahkan kebenaran pengguna. Jika pengguna tidak mempunyai kebenaran untuk mengakses halaman, kami boleh mengeluarkan maklumat segera yang sepadan dan menamatkan program.
Melaksanakan fungsi checkUserPermission<?php function checkUserPermission($role_id, $page) { // 查询用户的角色对应的权限 $query = "SELECT COUNT(*) FROM permissions WHERE role_id = :role_id AND page = :page"; // 执行查询 // 这里使用的是PDO块,你也可以使用其他数据库操作方式,如mysqli等 $stmt = $pdo->prepare($query); $stmt->bindParam(':role_id', $role_id); $stmt->bindParam(':page', $page); $stmt->execute(); // 检查是否有权限 $count = $stmt->fetchColumn(); return ($count > 0); } ?>
Dalam contoh di atas, kami mula-mula menulis pernyataan pertanyaan SQL untuk menanyakan bilangan rekod kebenaran untuk peranan dan halaman yang sepadan .
Kemudian, kami menggunakan pernyataan PDO yang disediakan untuk melaksanakan pertanyaan. Ambil perhatian bahawa dalam penggunaan sebenar, anda perlu mengubah suai sintaks yang sepadan mengikut kaedah sambungan pangkalan data dan rangka kerja kod anda sendiri.
Akhir sekali, kami menyemak bilangan hasil pertanyaan Jika lebih daripada 0, ini bermakna pengguna mempunyai kebenaran untuk mengakses halaman, jika tidak, tiada kebenaran.
Halaman pengurusan kebenaran peranan<?php // 获取所有角色 $query = "SELECT * FROM roles"; $roles = $pdo->query($query)->fetchAll(PDO::FETCH_ASSOC); // 获取所有页面 $query = "SELECT DISTINCT(page) FROM permissions"; $pages = $pdo->query($query)->fetchAll(PDO::FETCH_COLUMN); // 检查表单提交 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 清空权限表 $query = "TRUNCATE TABLE permissions"; $pdo->exec($query); // 重新插入权限记录 foreach ($roles as $role) { $role_id = $role['id']; foreach ($pages as $page) { if (isset($_POST['permission'][$role_id][$page])) { $query = "INSERT INTO permissions (role_id, page) VALUES (:role_id, :page)"; $stmt = $pdo->prepare($query); $stmt->bindParam(':role_id', $role_id); $stmt->bindParam(':page', $page); $stmt->execute(); } } } echo "权限设置已保存!"; } ?> <form method="POST"> <?php foreach ($roles as $role) : ?> <h3><?php echo $role['name']; ?></h3> <?php foreach ($pages as $page) : ?> <div> <input type="checkbox" name="permission[<?php echo $role['id']; ?>][<?php echo $page; ?>]"> <label><?php echo $page; ?></label> </div> <?php endforeach; ?> <?php endforeach; ?> <button type="submit">保存权限设置</button> </form>
Dalam contoh di atas, kami mula-mula menanyakan semua peranan dan halaman dan menyimpannya ke dalam tatasusunan $roles dan $pages.
Kemudian, jika borang diserahkan, kami mula-mula mengosongkan jadual kebenaran dan kemudian memasukkan semula rekod kebenaran. Di sini kami menggunakan tatasusunan berbilang dimensi untuk mengendalikan surat-menyurat antara peranan dan halaman yang berbeza.
Akhir sekali, kami mengeluarkan borang untuk memilih peranan dan kebenaran halaman. Pengguna boleh menyemak kebenaran yang sepadan dan klik butang Simpan untuk menyimpan tetapan kebenaran.
Ringkasan
Melalui contoh dan langkah kod di atas, kami boleh melaksanakan fungsi kawalan kebenaran berasaskan peranan. Apabila pengguna mengakses halaman terhad, sistem akan mengesahkan hubungan yang sepadan antara peranan pengguna dan kebenaran halaman, dan memberikan gesaan yang sepadan atau membenarkan akses.
Sudah tentu, ini hanyalah contoh mudah, dan pembangunan sebenar perlu dikembangkan dan dioptimumkan mengikut keperluan projek tertentu. Pada masa yang sama, kita juga harus memberi perhatian kepada isu keselamatan dan integriti data, seperti prapengumpulan pertanyaan pangkalan data dan mencegah suntikan SQL.
Saya harap artikel ini akan membantu anda memahami cara menggunakan PHP untuk melaksanakan fungsi kawalan kebenaran peranan sistem CMS.
Atas ialah kandungan terperinci Cara menggunakan PHP untuk melaksanakan fungsi kawalan kebenaran peranan sistem CMS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!