Rumah > pembangunan bahagian belakang > tutorial php > Kuasai peranan dalam pengesahan Kawalan Akses Berasaskan PHP (RBAC).

Kuasai peranan dalam pengesahan Kawalan Akses Berasaskan PHP (RBAC).

WBOY
Lepaskan: 2023-08-07 15:40:01
asal
1139 orang telah melayarinya

掌握PHP中的角色-Based Access Control(RBAC)鉴权

Kuasai peranan pengesahan Kawalan Akses Berasaskan (RBAC) dalam PHP

Pengenalan:
Pengesahan ialah ciri penting semasa membangunkan aplikasi web. Kawalan Capaian Berasaskan Peranan (RBAC) ialah model pengesahan yang biasa digunakan yang mengurus kawalan akses di sekitar peranan, menjadikan pengedaran kebenaran lebih fleksibel dan lebih mudah untuk diselenggara. Artikel ini akan memperkenalkan cara untuk melaksanakan pengesahan RBAC dalam PHP dan memberikan contoh kod yang berkaitan.

1. Gambaran Keseluruhan RBAC
Kawalan Akses Berasaskan Peranan (RBAC) ialah mod pengesahan yang mencapai pengurusan kawalan akses yang diperhalusi dengan mengabstrakkan pengguna, peranan dan kebenaran. Model RBAC terdiri daripada empat elemen asas: Pengguna, Peranan, Kebenaran dan Operasi. Pengguna mendapatkan kebenaran yang sepadan dengan memberikan peranan dan kemudian melakukan operasi yang sepadan.

Dalam model RBAC, terdapat hubungan banyak-ke-banyak antara pengguna dan peranan, dan terdapat juga hubungan banyak-ke-banyak antara peranan dan kebenaran. Pengguna boleh mempunyai berbilang peranan dan peranan boleh mempunyai berbilang kebenaran. Penubuhan perhubungan ini menjadikan peruntukan dan pengurusan kebenaran lebih fleksibel.

2. Idea pelaksanaan RBAC
Melaksanakan pengesahan RBAC dalam PHP boleh menyimpan dan mengurus data yang berkaitan melalui pangkalan data, fail konfigurasi atau cache. Artikel ini akan menggunakan kaedah pangkalan data sebagai contoh untuk menerangkan.

  1. Buat jadual pangkalan data
    Mula-mula buat jadual pangkalan data yang berkaitan, termasuk jadual pengguna, jadual peranan, jadual kebenaran dan jadual perkaitan:

Jadual pengguna (pengguna):

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
)
Salin selepas log masuk

Jadual peranan (peranan):

CREATE TABLE `role` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)
Salin selepas log masuk
(

kebenaran):

CREATE TABLE `permission` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)
Salin selepas log masuk

Jadual persatuan (peranan_pengguna dan kebenaran_peranan):

CREATE TABLE `user_role` (
  `user_id` int(11) unsigned NOT NULL,
  `role_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`user_id`,`role_id`)
)

CREATE TABLE `role_permission` (
  `role_id` int(11) unsigned NOT NULL,
  `permission_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`role_id`,`permission_id`)
)
Salin selepas log masuk
  1. Melaksanakan fungsi teras RBAC
    2.1 Log masuk dan pengesahan
    Semasa proses log masuk, sahkan sama ada maklumat log masuk pengguna adalah betul dan tetapkan peranan pengguna. Semasa proses pengesahan, kebenaran yang sepadan diperoleh berdasarkan peranan pengguna.

Contoh kod:

function login($username, $password) {
  // 验证用户登录信息是否正确,省略具体实现
  ...
 
  // 查询用户的角色信息
  $roles = queryUserRoles($username);
 
  // 获取角色对应的权限列表
  $permissions = [];
  foreach ($roles as $role) {
    $permissions = array_merge($permissions, queryRolePermissions($role));
  }
 
  // 存储用户登录信息及权限列表
  $_SESSION['user'] = [
    'username' => $username,
    'roles' => $roles,
    'permissions' => $permissions
  ];
}

function checkPermission($permission) {
  // 验证用户是否具有指定权限
  $permissions = $_SESSION['user']['permissions'];
  if (in_array($permission, $permissions)) {
    return true;
  } else {
    return false;
  }
}
Salin selepas log masuk

2.2 Kawalan Kebenaran
Dalam model RBAC, kebenaran dibahagikan kepada operasi. Untuk operasi yang memerlukan kawalan kebenaran, ia perlu dinilai berdasarkan peranan dan kebenaran.

Sampel kod:

function canAccess($operation) {
  // 判断用户是否具备执行指定操作的权限
  $roles = $_SESSION['user']['roles'];
  $permissions = [];
  foreach ($roles as $role) {
    $permissions = array_merge($permissions, queryRoleOperations($role));
  }
  if (in_array($operation, $permissions)) {
    return true;
  } else {
    return false;
  }
}
Salin selepas log masuk

3. Kelebihan dan senario terpakai RBAC

  1. Kelebihan:
  2. Fleksibiliti: Model RBAC menguruskan kawalan akses di sekeliling peranan, menjadikan pengedaran kebenaran dan kebenaran yang kompleks perlu ditangani dengan lebih fleksibel.
  3. Kebolehselenggaraan: Dengan mengabstraksi pengguna, peranan dan kebenaran, model RBAC menjadikan pengurusan kebenaran lebih terpusat dan piawai, menjadikannya lebih mudah untuk diselenggara dan diubah suai.
  4. Keselamatan: Model RBAC memisahkan kawalan akses kepada tahap peranan dan kebenaran, mengurangkan risiko keselamatan program.
  5. Senario terpakai:
  6. Sistem berbilang pengguna: Model RBAC sesuai untuk sistem aplikasi web berbilang pengguna dan boleh melaksanakan kawalan capaian yang terperinci untuk pengguna dengan peranan yang berbeza.
  7. Keperluan kebenaran yang kompleks: Model RBAC sesuai untuk sistem dengan keperluan kebenaran yang kompleks dan boleh mengurus dan memberikan kebenaran secara fleksibel.

Kesimpulan:
Melalui pengenalan artikel ini, kami telah mempelajari cara melaksanakan pengesahan RBAC dalam PHP dan menunjukkannya melalui contoh kod yang berkaitan. Model RBAC boleh menyediakan kawalan capaian yang fleksibel, boleh diselenggara dan selamat, dan sesuai untuk sistem aplikasi dengan berbilang pengguna dan keperluan kebenaran yang kompleks. Dalam pembangunan sebenar, model RBAC boleh dikembangkan dan diselaraskan mengikut keperluan anda sendiri untuk memenuhi senario aplikasi tertentu.

Atas ialah kandungan terperinci Kuasai peranan dalam pengesahan Kawalan Akses Berasaskan PHP (RBAC).. 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