Rumah  >  Artikel  >  rangka kerja php  >  Pengurusan kebenaran RBAC dalam rangka kerja Yii: mengawal kebenaran akses pengguna

Pengurusan kebenaran RBAC dalam rangka kerja Yii: mengawal kebenaran akses pengguna

王林
王林asal
2023-06-21 10:43:211295semak imbas

Dengan pembangunan Internet yang berterusan, semakin banyak laman web dan aplikasi perlu melaksanakan pengurusan dan kawalan kebenaran pengguna untuk memastikan keselamatan dan kebolehpercayaan tapak web dan aplikasi. Sebagai rangka kerja PHP yang popular, rangka kerja Yii menyediakan set lengkap mekanisme pengurusan kebenaran RBAC (Role-Based Access Control) untuk mengawal kebenaran akses pengguna kepada sistem. Artikel ini akan memperkenalkan mekanisme pengurusan kebenaran RBAC dalam rangka kerja Yii dan menunjukkan penggunaannya dengan contoh mudah.

1 Pengenalan kepada mekanisme pengurusan kebenaran RBAC

RBAC ialah mekanisme kawalan akses berasaskan peranan Dengan mengaitkan pengguna dan kebenaran kepada peranan masing-masing, hubungan antara pengguna dan kebenaran direalisasikan dalam peranan. proses kebenaran. Dalam RBAC, kebenaran dibahagikan kepada operasi, objek dan peraturan. Operasi merujuk kepada operasi pada data, seperti mencipta, membaca, mengemas kini, memadam, dsb. Objek merujuk kepada data yang perlu dikendalikan, seperti artikel, ulasan, pengguna, dll. Peraturan ialah beberapa sekatan ke atas kebenaran, seperti sama ada ini Pemilik data, dsb. Peranan ialah koleksi kebenaran pengguna, yang terdiri daripada berbilang kebenaran Ia biasanya termasuk set operasi, satu set kebenaran objek dan beberapa peraturan. Dalam rangka kerja Yii, RBAC dilaksanakan melalui CPhpAuthManager.

2. Operasi asas pengurusan kebenaran RBAC

Pertama, kita perlu menambah kebenaran dan peranan pada sistem. Ini boleh dicapai dengan menambahkan kebenaran dan peranan baharu dalam objek pengurusan kebenaran CPhpAuthManager dalam rangka kerja Yii. Berikut ialah contoh kod untuk menambah kebenaran baharu:

// 添加新权限
$auth=Yii::app()->authManager; 
$auth->createOperation('createPost','create a new post'); 
$auth->createOperation('readPost','read a post'); 
$auth->createOperation('updatePost','update a post'); 
$auth->createOperation('deletePost','delete a post'); 

Dalam kod di atas, kami telah menambah empat kebenaran baharu: mencipta artikel, membaca artikel, mengemas kini artikel dan memadamkan artikel.

Seterusnya, kita perlu menentukan peranan dan menambah kebenaran pada peranan itu. Kod berikut menunjukkan cara menambah kebenaran di atas pada peranan bernama "admin":

// 添加一个新角色,将权限添加到角色中
$auth=Yii::app()->authManager; 
$role=$auth->createRole('admin'); 
$role->addChild('createPost'); 
$role->addChild('readPost'); 
$role->addChild('updatePost'); 
$role->addChild('deletePost'); 

Dalam kod di atas, kami mentakrifkan peranan bernama "admin" dan menambah empat kebenaran di atas Tambahkan pada peranan ini.

Akhir sekali, semasa memproses permintaan akses pengguna, kami perlu menyemak sama ada pengguna mempunyai kebenaran yang sepadan. Kod berikut menunjukkan cara untuk menyemak sama ada pengguna mempunyai kebenaran "createPost":

//检查用户是否具有createPost权限
$auth=Yii::app()->authManager; 
if($auth->checkAccess('createPost',$userId))
{
    // 用户具有权限,进行操作
}
else
{
    // 用户不具有权限,返回错误
}

Dalam kod di atas, kami mula-mula mendapatkan objek pengurusan kebenaran $auth, dan kemudian memanggil kaedah checkAccess untuk menyemak sama ada pengguna mempunyai kebenaran createPost. Jika pengguna mempunyai kebenaran ini, operasi yang sepadan boleh dilakukan, jika tidak mesej ralat perlu dikembalikan.

3. Contoh pengurusan kebenaran RBAC

Andaikan kami mempunyai laman web blog ini mengandungi tiga entiti asas: artikel, ulasan dan pengguna Kami perlu mengawal hak akses pengguna kepada tiga entiti ini. Dalam contoh ini, kami akan menentukan dua peranan asas: Pentadbir dan Pengguna Biasa. Pentadbir telah membuat, membaca, mengemas kini dan memadam kebenaran pada semua entiti, manakala pengguna biasa hanya mempunyai kebenaran membaca pada artikel dan ulasan.

Mula-mula, konfigurasikan komponen pengurusan kebenaran RBAC dalam fail konfigurasi rangka kerja Yii:

'authManager'=>array(
    'class' => 'CDbAuthManager',
    'connectionID' => 'db',
    'itemTable' => '{{authitem}}',
    'assignmentTable' => '{{authassignment}}',
    'itemChildTable' => '{{authitemchild}}',
),

Kemudian, dalam pengawal kami, tambahkan kod berikut untuk menambah kebenaran dan peranan baharu:

$auth = Yii::app()->authManager;

// 添加新权限
$auth->createOperation('createArticle', 'create a new article');
$auth->createOperation('readArticle', 'read an article');
$auth->createOperation('updateArticle', 'update an article');
$auth->createOperation('deleteArticle', 'delete an article');
$auth->createOperation('createComment', 'create a new comment');
$auth->createOperation('readComment', 'read a comment');
$auth->createOperation('updateComment', 'update a comment');
$auth->createOperation('deleteComment', 'delete a comment');

// 添加新角色
$roleAdmin = $auth->createRole('admin');
$roleAdmin->addChild('createArticle');
$roleAdmin->addChild('readArticle');
$roleAdmin->addChild('updateArticle');
$roleAdmin->addChild('deleteArticle');
$roleAdmin->addChild('createComment');
$roleAdmin->addChild('readComment');
$roleAdmin->addChild('updateComment');
$roleAdmin->addChild('deleteComment');

$roleUser = $auth->createRole('user');
$roleUser->addChild('readArticle');
$roleUser->addChild('readComment');

// 将角色分配给用户
$auth->assign('admin', 1);
$auth->assign('user', 2);

Dalam kod di atas, kami mula-mula mencipta lapan kebenaran baharu, yang digunakan untuk mengawal operasi CRUD artikel dan ulasan. Kemudian, kami menentukan dua peranan baharu: pentadbir dan pengguna, dan menambahkan kebenaran yang sepadan pada peranan tersebut. Akhir sekali, kami memberikan peranan pentadbir kepada pengguna 1 dan peranan pengguna kepada pengguna 2.

Seterusnya, dalam pengawal, kita boleh menyemak sama ada pengguna mempunyai kebenaran yang sepadan dengan memanggil kaedah checkAccess dan melaksanakan operasi yang sepadan, seperti yang ditunjukkan dalam kod berikut:

if(Yii::app()->user->checkAccess('createArticle'))
{
    // 当前用户具有创建文章权限,进行相应操作
}

if(Yii::app()->user->checkAccess('readArticle'))
{
    // 当前用户具有读取文章权限,进行相应操作
}

if(Yii::app()->user->checkAccess('updateArticle'))
{
    // 当前用户具有更新文章权限,进行相应操作
}

if(Yii::app()->user->checkAccess('deleteArticle'))
{
    // 当前用户具有删除文章权限,进行相应操作
}

if(Yii::app()->user->checkAccess('createComment'))
{
    // 当前用户具有创建评论权限,进行相应操作
}

if(Yii::app()->user->checkAccess('readComment'))
{
    // 当前用户具有读取评论权限,进行相应操作
}

if(Yii::app()->user->checkAccess('updateComment'))
{
    // 当前用户具有更新评论权限,进行相应操作
}

if(Yii::app()->user->checkAccess('deleteComment'))
{
    // 当前用户具有删除评论权限,进行相应操作
}

Kod di atas , kami menyemak sama ada pengguna mempunyai kebenaran yang sepadan dengan memanggil kaedah checkAccess dan melaksanakan operasi yang sepadan apabila mempunyai kebenaran yang sepadan. Contohnya, apabila pengguna mempunyai kebenaran untuk mencipta artikel, kami boleh melakukan operasi cipta artikel yang sepadan.

4. Kesimpulan

Melalui pengenalan artikel ini, kita dapat melihat bahawa rangka kerja Yii menyediakan set lengkap mekanisme pengurusan kebenaran RBAC untuk mengawal kebenaran akses pengguna kepada sistem. Dengan mentakrifkan peranan dan menambahkan kebenaran pada peranan, kami boleh mengawal akses pengguna kepada entiti dalam sistem dengan mudah. Sudah tentu, sebagai tambahan kepada mekanisme pengurusan kebenaran RBAC, rangka kerja Yii juga menyediakan banyak ciri keselamatan lain, seperti penyulitan kata laluan, menghalang pemalsuan permintaan merentas tapak, dan lain-lain, yang boleh dipilih oleh pembangun untuk digunakan mengikut situasi sebenar.

Atas ialah kandungan terperinci Pengurusan kebenaran RBAC dalam rangka kerja Yii: mengawal kebenaran akses pengguna. 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