Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perisian tengah rangka kerja Yii: menggunakan pengurusan pengesahan dan kebenaran untuk melaksanakan kawalan kebenaran peranan

Perisian tengah rangka kerja Yii: menggunakan pengurusan pengesahan dan kebenaran untuk melaksanakan kawalan kebenaran peranan

王林
王林asal
2023-07-28 20:57:20729semak imbas

Perisian tengah rangka kerja Yii: Gunakan pengurusan pengesahan dan kebenaran untuk melaksanakan kawalan kebenaran peranan

Dalam pembangunan aplikasi peringkat perusahaan, kawalan kebenaran adalah bahagian yang penting. Menggunakan rangka kerja Yii, kami boleh melaksanakan kawalan kebenaran peranan dengan mudah melalui perisian tengah untuk melindungi aplikasi kami daripada capaian yang tidak dibenarkan.

Rangka kerja Yii menyediakan sistem pengurusan pengesahan dan kebenaran lengkap yang boleh membantu kami melaksanakan pengesahan pengguna dan kawalan kebenaran peranan. Di bawah saya akan memperkenalkan cara menggunakan perisian tengah dan menggabungkan fungsi ini untuk melaksanakan kawalan kebenaran peranan.

Pertama, kita perlu mengkonfigurasi komponen pengurusan pengesahan dan kebenaran rangka kerja Yii.

'components' => [
    ...
    'user' => [
        'identityClass' => 'appmodelsUser',
        'enableAutoLogin' => true,
    ],
    'authManager' => [
        'class' => 'yiibacDbManager',
    ],
    ...
],

Dalam konfigurasi di atas, kami menyatakan identityClass komponen pengesahan pengguna sebagai appmodelsUser dan mendayakan fungsi log masuk automatik. Pada masa yang sama, kami menggunakan komponen pengurusan kebenaran pangkalan data rangka kerja Yii. identityClassappmodelsUser,并开启了自动登录功能。同时,我们使用了Yii框架的数据库授权管理组件。

接下来,我们需要创建一个中间件类来处理权限控制。

namespace appmiddleware;

use Yii;
use yiiaseAction;
use yiiaseActionFilter;
use yiiwebForbiddenHttpException;

class RBACMiddleware extends ActionFilter
{
    public function beforeAction($action)
    {
        $user = Yii::$app->user;

        // 如果用户未登录,则跳转到登录页面
        if ($user->isGuest) {
            $user->loginRequired();
        }

        // 获取当前用户的权限
        $permission = $action->controller->id . '/' . $action->id;

        // 检查用户是否有访问权限
        if (!$user->can($permission)) {
            throw new ForbiddenHttpException('您没有权限访问该页面。');
        }

        return parent::beforeAction($action);
    }
}

在上述中间件类中,我们重写了beforeAction方法。在该方法中,我们首先检查用户是否已登录,如果未登录,则跳转到登录页面。

然后,我们使用$action对象获取当前请求的控制器和方法名,并拼接成权限字符串。接着,我们通过调用Yii::$app->user->can($permission)方法来检查当前用户是否有访问权限。

如果用户没有访问权限,我们将抛出一个ForbiddenHttpException异常,提示用户没有权限访问该页面。

接下来,我们需要在控制器类中使用我们刚刚创建的中间件。

namespace appcontrollers;

use yiiwebController;

use appmiddlewareRBACMiddleware;

class UserController extends Controller
{
    public function behaviors()
    {
        return [
            RBACMiddleware::class,
        ];
    }

    ...
}

在上述代码中,我们通过重写控制器的behaviors方法,将RBACMiddleware中间件添加到控制器的行为列表中。

通过这样的操作,我们就完成了使用中间件来实现角色权限控制的配置。

接下来,让我们来看一个使用角色权限控制的示例代码。

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

// 创建一个角色
$role = $auth->createRole('admin');
$role->description = '管理员';
$auth->add($role);

// 创建一个权限
$permission = $auth->createPermission('user/delete');
$permission->description = '删除用户';
$auth->add($permission);

// 给角色赋予权限
$auth->addChild($role, $permission);

// 给用户授权
$auth->assign($role, $userId);

在上述示例中,我们首先通过$auth->createRole方法创建了一个名为admin的角色,然后创建了一个名为user/delete的权限。

接着,我们通过$auth->addChild方法将权限赋予角色,再通过$auth->assign

Seterusnya, kita perlu mencipta kelas perisian tengah untuk mengendalikan kawalan kebenaran.

rrreee

Dalam kelas middleware di atas, kami mengatasi kaedah beforeAction. Dalam kaedah ini, kami mula-mula menyemak sama ada pengguna telah log masuk, dan jika tidak, lompat ke halaman log masuk.

Kemudian, kami menggunakan objek $action untuk mendapatkan nama pengawal dan kaedah permintaan semasa, dan menggabungkannya ke dalam rentetan kebenaran. Seterusnya, kami menyemak sama ada pengguna semasa mempunyai kebenaran akses dengan memanggil kaedah Yii::$app->user->can($permission).

Jika pengguna tidak mempunyai kebenaran akses, kami akan membuang pengecualian ForbiddenHttpException, menggesa pengguna bahawa dia tidak mempunyai kebenaran untuk mengakses halaman.

Seterusnya, kami perlu menggunakan perisian tengah yang baru kami buat dalam kelas pengawal kami. 🎜rrreee🎜Dalam kod di atas, kami menambah RBACMiddleware middleware pada senarai tingkah laku pengawal dengan mengatasi kaedah tingkah laku pengawal. 🎜🎜Melalui operasi ini, kami telah melengkapkan konfigurasi menggunakan perisian tengah untuk melaksanakan kawalan kebenaran peranan. 🎜🎜Seterusnya, mari lihat kod sampel menggunakan kawalan kebenaran peranan. 🎜rrreee🎜Dalam contoh di atas, kami mula-mula mencipta peranan bernama admin melalui kaedah $auth->createRole, dan kemudian mencipta peranan bernama user/ padamkan kebenaran. 🎜🎜Seterusnya, kami memberikan kebenaran kepada peranan melalui kaedah $auth->addChild, dan kemudian membenarkan pengguna yang ditentukan melalui kaedah $auth->assign. 🎜🎜Dengan contoh konfigurasi dan kod sedemikian, kami boleh melaksanakan kawalan kebenaran peranan dengan mudah menggunakan pengurusan pengesahan dan kebenaran rangka kerja Yii. Ini melindungi aplikasi kami daripada capaian yang tidak dibenarkan dan meningkatkan keselamatan aplikasi. 🎜🎜Ringkasan: 🎜🎜Melalui pengenalan di atas, kami telah mempelajari cara menggunakan fungsi pengurusan pengesahan dan keizinan rangka kerja Yii dan menggabungkannya dengan perisian tengah untuk melaksanakan kawalan kebenaran peranan. Pada masa yang sama, kami juga mempelajari cara mengkonfigurasi komponen pengurusan pengesahan dan kebenaran, serta memberikan kod sampel mudah untuk kawalan kebenaran peranan. 🎜🎜Dalam pembangunan aplikasi sebenar, kami boleh mengkonfigurasi dan menggunakan fungsi pengurusan pengesahan dan kebenaran rangka kerja Yii secara fleksibel mengikut keperluan projek untuk menyediakan perlindungan yang lebih selamat dan boleh dipercayai untuk aplikasi. 🎜

Atas ialah kandungan terperinci Perisian tengah rangka kerja Yii: menggunakan pengurusan pengesahan dan kebenaran untuk melaksanakan kawalan kebenaran peranan. 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