Bagaimana untuk menetapkan kebenaran halaman dalam php

PHPz
Lepaskan: 2023-04-24 14:21:37
asal
1076 orang telah melayarinya

Dalam pembangunan web, selalunya perlu untuk memaparkan kandungan yang berbeza kepada pengguna yang berbeza atau menyekat hak akses yang berbeza kepada halaman. Sebagai bahasa pengaturcaraan bahagian pelayan yang digunakan secara meluas, PHP menyediakan pelbagai alatan dan fungsi untuk mencapai keperluan ini. Artikel ini akan memperkenalkan cara menetapkan kebenaran halaman menggunakan PHP.

1. Pengesahan log masuk pengguna

Sebelum menetapkan kebenaran halaman, pengguna mesti log masuk dan disahkan terlebih dahulu. Pengesahan log masuk pengguna boleh dilakukan melalui langkah berikut:

  1. Sediakan borang log masuk pada halaman, dan pengguna memasukkan nama pengguna dan kata laluan.
  2. Sahkan nama pengguna dan kata laluan yang dimasukkan oleh pengguna di bahagian belakang.
  3. Jika pengesahan berjaya, simpan maklumat pengguna dalam sesi dan lompat ke halaman kejayaan log masuk.
  4. Jika pengesahan gagal, kembali ke halaman log masuk dan gesa pengguna untuk masuk semula.

Berikut ialah contoh pengesahan log masuk pengguna yang mudah:

session_start();

if(isset($_POST['submit'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
  
  // 验证用户名和密码是否正确
  if($username == 'admin' && $password == 'password123'){
    // 用户认证成功
    $_SESSION['user'] = $username;
    header("Location: success.php");
    exit();
  }else{
    // 用户认证失败
    $error_message = "用户名或密码错误";
  }
}

// 显示登录表单
Salin selepas log masuk

2. Tetapkan kebenaran halaman berdasarkan peranan pengguna

Secara amnya, fungsi pengguna yang berbeza. Ia berbeza daripada kebenaran operasi. Kita boleh mencapai ini dengan mentakrifkan peranan pengguna yang berbeza dan memberikan kebenaran yang sepadan kepada setiap peranan. Peranan pengguna biasa termasuk pentadbir, pengguna biasa, pengguna VIP, dsb.

Berikut ialah contoh tetapan kebenaran peranan:

session_start();

// 定义用户角色
define('ROLE_ADMIN', 1);
define('ROLE_USER', 2);
define('ROLE_VIP', 3);

// 定义页面和对应的权限
$pages = array(
  'home.php' => ROLE_ADMIN | ROLE_USER | ROLE_VIP,
  'admin.php' => ROLE_ADMIN,
  'user.php' => ROLE_USER | ROLE_VIP,
  'vip.php' => ROLE_VIP
);

// 判断用户是否登录
if(!isset($_SESSION['user'])){
  header("Location: login.php");
  exit();
}

// 获取当前用户角色
$user_role = ROLE_USER; // 默认为普通用户

if($_SESSION['is_admin']){
  $user_role = ROLE_ADMIN;
}else if($_SESSION['is_vip']){
  $user_role = ROLE_VIP;
}

// 判断当前页面是否需要用户权限
$current_page = basename($_SERVER['SCRIPT_FILENAME']);

if(isset($pages[$current_page])){
  $required_role = $pages[$current_page];
  
  // 判断用户是否有访问该页面的权限
  if(($required_role & $user_role) == 0){
    // 用户无权限访问该页面
    header("HTTP/1.1 401 Unauthorized");
    exit();
  }
}
Salin selepas log masuk

Dalam contoh di atas, kami mula-mula mentakrifkan tiga pemalar, mewakili peranan pengguna yang berbeza. Kemudian tatasusunan $pages ditakrifkan untuk menyimpan kebenaran pengguna yang sepadan dengan setiap halaman. Kemudian ia menentukan sama ada pengguna dilog masuk dan peranan pengguna. Akhir sekali, tentukan sama ada halaman semasa memerlukan kebenaran akses, dan jika ya, tentukan sama ada pengguna semasa mempunyai kebenaran untuk mengakses halaman tersebut.

3. Tetapkan kebenaran halaman berdasarkan kumpulan pengguna

Selain menetapkan kebenaran halaman berdasarkan peranan pengguna, kami juga boleh mencapai kawalan kebenaran halaman dengan mengumpulkan pengguna dan memberikan kebenaran kepada setiap kumpulan . Berikut ialah contoh menetapkan kebenaran halaman berdasarkan kumpulan pengguna:

session_start();

// 定义用户组
define('GROUP_ADMIN', 1);
define('GROUP_USER', 2);
define('GROUP_VIP', 3);

// 定义每个用户所属的组
$users = array(
  array('id' => 1, 'username' => 'admin', 'password' => 'password123', 'group' => GROUP_ADMIN),
  array('id' => 2, 'username' => 'user1', 'password' => '123456', 'group' => GROUP_USER),
  array('id' => 3, 'username' => 'vip1', 'password' => '654321', 'group' => GROUP_VIP)
);

// 定义页面和对应的权限
$pages = array(
  'home.php' => array(GROUP_ADMIN, GROUP_USER, GROUP_VIP),
  'admin.php' => array(GROUP_ADMIN),
  'user.php' => array(GROUP_USER, GROUP_VIP),
  'vip.php' => array(GROUP_VIP)
);

// 判断用户是否登录
if(!isset($_SESSION['user'])){
  header("Location: login.php");
  exit();
}

// 获取当前用户所属的用户组
$user_group = 0;

foreach($users as $user){
  if($_SESSION['user'] == $user['username']){
    $user_group = $user['group'];
    break;
  }
}

// 判断当前页面是否需要用户权限
$current_page = basename($_SERVER['SCRIPT_FILENAME']);

if(isset($pages[$current_page])){
  $required_groups = $pages[$current_page];
  
  // 判断用户是否有访问该页面的权限
  if(!in_array($user_group, $required_groups)){
    // 用户无权限访问该页面
    header("HTTP/1.1 401 Unauthorized");
    exit();
  }
}
Salin selepas log masuk

Dalam contoh di atas, kami menentukan tiga kumpulan pengguna dan menugaskan setiap pengguna kepada kumpulan. Kemudian tatasusunan $pages ditakrifkan untuk menyimpan kebenaran kumpulan pengguna yang sepadan dengan setiap halaman. Kemudian tentukan sama ada pengguna telah log masuk dan dapatkan kumpulan pengguna yang menjadi milik pengguna. Akhir sekali, ia dinilai sama ada halaman semasa memerlukan kebenaran akses Jika ya, ia dinilai sama ada kumpulan pengguna yang dimiliki pengguna semasa mempunyai kebenaran untuk mengakses halaman.

Ringkasnya, melalui kaedah di atas, kami boleh melaksanakan kawalan kebenaran halaman dengan mudah dalam PHP. Dalam aplikasi praktikal, perlu memilih kaedah yang sesuai mengikut keperluan sebenar.

Atas ialah kandungan terperinci Bagaimana untuk menetapkan kebenaran halaman dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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