Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk menggunakan pengesahan kebenaran dalam thinkphp

Bagaimana untuk menggunakan pengesahan kebenaran dalam thinkphp

WBOY
WBOYasal
2023-05-26 14:36:081015semak imbas

Dengan pembangunan Internet yang berterusan, bilangan pengguna laman web semakin meningkat Untuk mengurus dan memastikan keselamatan data pengguna dengan lebih baik, pengesahan kuasa telah menjadi salah satu fungsi penting setiap laman web. Antara rangka kerja PHP, ThinkPHP ialah rangka kerja yang sangat popular dan juga menyediakan fungsi pengesahan autoriti yang lengkap. Jadi, artikel ini akan memperkenalkan secara terperinci cara ThinkPHP menggunakan pengesahan kebenaran.

1 Peranan pengesahan kebenaran

Pengesahan kebenaran adalah terutamanya untuk mengawal kebenaran pengguna dalam peranan yang berbeza untuk memastikan pengguna hanya boleh mengakses sumber yang mereka mempunyai kebenaran untuk mengakses dan tidak boleh menggunakannya di luar kuasa mereka. Sebagai contoh, dalam laman web e-dagang, pentadbir boleh melihat dan mengurus semua maklumat produk, manakala pengguna biasa hanya boleh menyemak imbas maklumat produk dan tidak boleh mengubah suai atau memadamkannya.

2. Kaedah pelaksanaan pengesahan autoriti

Rangka kerja ThinkPHP menyediakan dua kaedah pelaksanaan pengesahan autoriti: RBAC dan pengesahan autoriti berasaskan nod. RBAC (Kawalan Akses Berasaskan Peranan), iaitu kawalan akses berasaskan peranan, mengklasifikasikan pengguna yang berbeza mengikut peranan mereka. Pengesahan kuasa berasaskan nod mengawal kuasa melalui nod, yang boleh menjadi pengawal, kaedah pengendalian, dsb.

  1. RBAC

Untuk melaksanakan pengesahan kebenaran melalui RBAC dalam rangka kerja, anda perlu menggunakan kelas Auth, yang terletak di ThinkPHPLibraryThink. Langkah-langkah khusus adalah seperti berikut:

(1) Buat jadual nod dan jadual peranan, dan kaitkan nod kebenaran dengan peranan. Mencipta jadual nod boleh sepadan dengan pengawal dan kaedah operasi Jadual peranan menyimpan nama peranan dan ID nod yang sepadan, seperti yang ditunjukkan di bawah:

Jadual nod (think_node):

id name module controller action pid
1 index home index index 0
2 add home index add 1
3 edit home index edit 1
4 delete home index delete 1

Jadual peranan (think_role):

id name node_ids
1 admin 1,2,3,4
2 user 1

(2) Gunakan kelas Auth dalam pengawal untuk pengesahan kebenaran Kod khusus adalah seperti berikut:

class IndexController extends Controller
{.

public function __construct()
{
    parent::__construct();
    //实例化Auth类
    $auth = new ThinkAuth();

    //获取当前用户的角色ID
    $uid = session('user_id');
    //获取当前请求的控制器和方法
    $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME;

    //进行权限认证
    if (!$auth->check($url, $uid)) {
        $this->error('您没有访问该页面的权限!');
    }
}

}

Dalam kod di atas, dengan membuat seketika kelas Auth, ID peranan pengguna semasa dan pengawal serta kaedah yang diminta diperoleh, dan kemudian kaedah $auth->check() digunakan untuk pengesahan kebenaran. Jika pengesahan gagal, mesej ralat akan dikeluarkan.

  1. Pengesahan kebenaran berasaskan nod

Pengesahan kebenaran berasaskan nod boleh dilaksanakan menggunakan kelas Access yang disediakan oleh rangka kerja, yang juga terdapat dalam ThinkPHPLibraryThink. Langkah khusus adalah seperti berikut:

(1) Gunakan kelas Access dalam pengawal untuk pengesahan kebenaran Kod khusus adalah seperti berikut:

class IndexController extends Controller
{

public function __construct()
{
    parent::__construct();
    //实例化Access类
    $access = new ThinkAccess();

    //获取当前用户的角色ID
    $uid = session('user_id');
    //获取当前请求的控制器和方法
    $url = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME;

    //定义权限节点列表
    $nodes = array(
        'Index/index',//首页
        'Index/add',//添加页面
        'Index/edit',//编辑页面
        'Index/delete',//删除操作
    );

    //进行权限认证
    if (!$access->check($nodes, $uid, $url)) {
        $this->error('您没有访问该页面的权限!');
    }
}

}

Dalam kod di atas, dengan menghidupkan kelas Access, ID peranan pengguna semasa dan pengawal serta kaedah yang diminta diperoleh, dan kemudian kaedah $access->check() digunakan untuk pengesahan kebenaran. Setiap item dalam senarai nod kebenaran sepadan dengan nod, iaitu pengawal dan kaedah. Jika pengesahan gagal, mesej ralat akan dikeluarkan.

3. Pengoptimuman pengesahan kebenaran

Dalam aplikasi praktikal, kami juga perlu membuat beberapa pengoptimuman kepada pengesahan kebenaran untuk meningkatkan kebolehgunaan semula dan keselamatan. Titik pengoptimuman khusus adalah seperti berikut:

    Tubuhkan pengawal awam
Anda boleh mencipta pengawal awam BaseController dalam modul Biasa rangka kerja dan letakkan logik pengesahan kebenaran dalam kawalan ini di dalam kapal. Selepas pengawal lain mewarisi pengawal ini, mereka boleh menggunakan semula bahagian kod ini.

    Maklumat nod cache
Dalam pengesahan autoriti, jadual nod dan jadual peranan perlu disoal setiap kali, yang akan menjejaskan prestasi sistem. Oleh itu, hasil pertanyaan boleh dicache untuk meningkatkan prestasi sistem. Anda boleh menggunakan kelas cache yang disediakan oleh rangka kerja untuk cache hasil pertanyaan Pada kali seterusnya anda membuat pertanyaan, anda boleh terus mendapatkan hasil cache.

    Maklumat nod yang disulitkan
Untuk meningkatkan keselamatan, kami boleh menyulitkan maklumat nod untuk mengelakkan pendedahan langsung maklumat nod. Anda boleh menggunakan kelas penyulitan yang disediakan oleh rangka kerja untuk menyulitkan ID nod dan menyimpan maklumat nod yang disulitkan dalam jadual peranan.

4. Ringkasan

Pengesahan kebenaran adalah bahagian penting dalam pembangunan tapak web. Ia boleh memastikan keselamatan data pengguna dan meningkatkan pengurusan pengguna. Dalam rangka kerja ThinkPHP, menggunakan kelas Auth dan kelas Access, fungsi pengesahan autoriti boleh dilaksanakan dengan sangat mudah. Melalui pengenalan artikel ini, anda boleh memahami langkah dan kaedah pengoptimuman untuk menggunakan pengesahan kebenaran dalam ThinkPHP, yang saya percaya akan membantu kerja pembangunan anda.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan pengesahan kebenaran dalam thinkphp. 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