Rumah  >  Artikel  >  rangka kerja php  >  Gunakan Workerman untuk merealisasikan pengesahan pengguna dan kawalan kuasa sistem sembang dalam talian

Gunakan Workerman untuk merealisasikan pengesahan pengguna dan kawalan kuasa sistem sembang dalam talian

王林
王林asal
2023-09-09 18:30:251337semak imbas

Gunakan Workerman untuk merealisasikan pengesahan pengguna dan kawalan kuasa sistem sembang dalam talian

Gunakan pekerja untuk merealisasikan pengesahan pengguna dan kawalan kebenaran sistem sembang dalam talian

Sebagai rangka kerja soket PHP berprestasi tinggi, pekerja digunakan secara meluas dalam pembangunan sistem komunikasi masa nyata. Apabila membangunkan sistem sembang dalam talian, pengesahan pengguna dan kawalan kebenaran adalah pautan yang sangat penting. Artikel ini akan memperkenalkan cara menggunakan Workerman untuk melengkapkan pengesahan pengguna dan kawalan kebenaran serta melampirkan contoh kod.

  1. Pengesahan pengguna
    Pengesahan pengguna merujuk kepada pengesahan sama ada identiti pengguna adalah sah dalam sistem sembang dalam talian, mekanisme pengesahan berasaskan Token biasanya digunakan. Langkah-langkah khusus adalah seperti berikut:

Langkah 1: Apabila pengguna log masuk, pelayan menjana Token dan menghantar Token kepada klien untuk simpanan.

Langkah 2: Pelanggan menghantar Token ke pelayan dalam bentuk Pengepala HTTP dalam permintaan seterusnya.

Langkah 3: Apabila pelayan menerima permintaan, sahkan kesahihan Token. Jika token itu sah, pengguna dianggap log masuk dan permintaan boleh terus diproses jika tidak, mesej ralat kegagalan pengesahan dikembalikan.

Berikut ialah kod contoh yang menggunakan pekerja pekerja untuk melaksanakan pengesahan pengguna:

require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;
use WorkermanConnectionAsyncTcpConnection;
use WorkermanProtocolsHttpRequest;
use WorkermanProtocolsHttpResponse;

$worker = new Worker('http://0.0.0.0:8080');

$users = [
    'user1' => 'password1',
    'user2' => 'password2',
    // ...
];

$worker->onMessage = function ($connection, Request $request) use ($users) {
    $path = $request->path();
    if ($path === '/login') {
        $username = $request->post('username');
        $password = $request->post('password');
        if (!isset($users[$username]) || $users[$username] !== $password) {
            $response = new Response(401, ['Content-Type' => 'application/json'], json_encode(['error' => 'Invalid credentials']));
            $connection->send($response);
        } else {
            $token = generateToken();
            $response = new Response(200, ['Content-Type' => 'application/json'], json_encode(['token' => $token]));
            $connection->send($response);
        }
    } elseif (substr($path, 0, 7) === '/api/v1') {
        $token = $request->header('Authorization');
        if (!validateToken($token)) {
            $response = new Response(401, ['Content-Type' => 'application/json'], json_encode(['error' => 'Unauthorized']));
            $connection->send($response);
        } else {
            // 处理请求逻辑
        }
    } else {
        $response = new Response(404, ['Content-Type' => 'text/html'], 'Not found');
        $connection->send($response);
    }
};

Worker::runAll();

function generateToken()
{
    // 生成Token逻辑
}

function validateToken($token)
{
    // 验证Token逻辑
}
  1. Kawalan kebenaran
    Kawalan kebenaran merujuk kepada mengawal akses pengguna kepada sumber sistem Dalam sistem sembang dalam talian, peranan dan kebenaran biasanya digunakan untuk kawalan kebenaran. Langkah-langkah khusus adalah seperti berikut:

Langkah 1: Tentukan senarai peranan dan kebenaran dan simpannya dalam pangkalan data.

Langkah 2: Selepas pengguna log masuk, pelayan mendapatkan senarai kebenaran yang sepadan dengan peranan berdasarkan peranan pengguna.

Langkah 3: Apabila pelayan memproses permintaan, ia menentukan sama ada pengguna mempunyai kebenaran untuk melaksanakan operasi berdasarkan kebenaran yang diperlukan oleh permintaan. Jika ia mempunyai kebenaran, teruskan memproses permintaan jika tidak, kembalikan mesej ralat yang menunjukkan kebenaran tidak mencukupi.

Berikut ialah contoh kod yang menggunakan Workerman untuk melaksanakan kawalan kebenaran:

require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;
use WorkermanConnectionAsyncTcpConnection;
use WorkermanProtocolsHttpRequest;
use WorkermanProtocolsHttpResponse;

$worker = new Worker('http://0.0.0.0:8080');

$roles = [
    'admin' => ['create', 'read', 'update', 'delete'],
    'user' => ['read']
];

$worker->onMessage = function ($connection, Request $request) use ($roles) {
    $path = $request->path();
    $role = getUserRole(); // 根据Token获取用户角色

    if (!isset($roles[$role])) {
        $response = new Response(401, ['Content-Type' => 'application/json'], json_encode(['error' => 'Unauthorized']));
        $connection->send($response);
        return;
    }

    $allowedPermissions = $roles[$role];
    $requiredPermission = extractRequiredPermission($path); // 根据请求路径提取所需权限

    if (!in_array($requiredPermission, $allowedPermissions)) {
        $response = new Response(403, ['Content-Type' => 'application/json'], json_encode(['error' => 'Forbidden']));
        $connection->send($response);
        return;
    }

    // 处理请求逻辑
};

Worker::runAll();

function getUserRole()
{
    // 根据Token获取用户角色的逻辑
}

function extractRequiredPermission($path)
{
    // 从请求路径中提取所需权限的逻辑
}

Melalui contoh kod di atas, kita dapat melihat bahawa sangat mudah untuk melaksanakan pengesahan pengguna dan kawalan kebenaran dalam Workerman. Melalui mekanisme pengesahan dan kebenaran yang munasabah, keselamatan sistem sembang dalam talian dan hak pengguna boleh dilindungi dengan berkesan. Semoga artikel ini dapat membantu anda.

Atas ialah kandungan terperinci Gunakan Workerman untuk merealisasikan pengesahan pengguna dan kawalan kuasa sistem sembang dalam talian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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