Cara menggunakan PHP untuk melaksanakan fungsi kawalan kebenaran peranan sistem CMS

PHPz
Lepaskan: 2023-08-06 15:24:01
asal
672 orang telah melayarinya

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.

  1. Reka bentuk pangkalan data

Pertama, kita perlu mereka bentuk jadual pangkalan data untuk menyimpan maklumat peranan dan kebenaran pengguna. Tiga jadual boleh dibuat: pengguna, peranan dan kebenaran.

  • Jadual pengguna termasuk maklumat asas pengguna, seperti nama pengguna, kata laluan, dsb.
  • jadual peranan mentakrifkan nama dan perihalan peranan yang berbeza.
  • Jadual kebenaran mentakrifkan kebenaran yang dimiliki oleh setiap peranan.

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`)
);
Salin selepas log masuk

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`)
);
Salin selepas log masuk

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`)
);
Salin selepas log masuk
  1. peranan pengesahan kebenaran pengguna diperlukan sebelum setiap halaman🜎
  2. diperlukan pengesahan kebenaran semula 🜎 Sahkan kebenaran pengguna. Berikut ialah contoh pelaksanaan mudah:
<?php
// 获取当前登录用户的角色ID
$role_id = getCurrentUserRole();

// 获取当前页面的路径
$page = $_SERVER['REQUEST_URI'];

// 验证用户权限
if (!checkUserPermission($role_id, $page)) {
    echo "您没有权限访问该页面!";
    exit;
}

// 其他页面逻辑...
?>
Salin selepas log masuk

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
  1. Berikut ialah contoh yang mungkin untuk 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);
}
?>
Salin selepas log masuk

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
  1. Akhir sekali, kami boleh membuat halaman pengurusan untuk menetapkan hubungan yang sepadan antara peranan dan kebenaran. Berikut ialah contoh mudah:
<?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>
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!