Rumah > rangka kerja php > Laravel > teks badan

Bagaimana untuk melaksanakan pengurusan keizinan sistem silang dan rentas domain dalam Laravel

PHPz
Lepaskan: 2023-11-02 17:02:09
asal
1011 orang telah melayarinya

Bagaimana untuk melaksanakan pengurusan keizinan sistem silang dan rentas domain dalam Laravel

Sebagai rangka kerja PHP yang popular, Laravel mempunyai fungsi yang kaya dan sistem sambungan yang sangat baik. Dari segi pelaksanaan pengurusan kebenaran, Laravel juga menyediakan sokongan yang kaya, yang boleh dengan mudah melaksanakan pelbagai fungsi berkaitan kebenaran dalam sistem. Walau bagaimanapun, dalam aplikasi sebenar, ia mungkin melibatkan pengurusan kebenaran antara berbilang sistem, atau pengesahan kebenaran merentas domain Dalam kes ini, anda perlu menggunakan fungsi pengurusan kebenaran silang sistem dan merentas domain Laravel.

Artikel ini akan memperkenalkan cara melaksanakan pengurusan kebenaran merentas sistem dan merentas domain dalam Laravel, terutamanya termasuk kandungan berikut:

  1. Pengetahuan asas pengurusan kebenaran dalam Laravel
  2. Cara melaksanakan pengurusan kebenaran merentas sistem
  3. Bagaimana untuk melaksanakan kebenaran merentas domain Sahkan
  4. Pengetahuan asas pengurusan kebenaran dalam Laravel

Dalam Laravel, pengurusan kebenaran boleh dicapai melalui sistem Auth Laravel sendiri menyediakan fungsi seperti pengesahan pengguna, kebenaran dan penetapan semula kata laluan. Fungsi kebenaran dilaksanakan terutamanya melalui kelas Gerbang dan Dasar.

Gate ialah kelas teras yang melaksanakan keizinan dalam Laravel Anda boleh menggunakannya untuk menentukan dan menentukan kebenaran pengguna. Dalam Laravel, anda boleh mentakrifkan Gate dalam fail app/Providers/AuthServiceProvider.php:

public function boot()
{
    $this->registerPolicies();

    Gate::define('update-post', function ($user, $post) {
        return $user->id === $post->user_id;
    });
}
Salin selepas log masuk

Contoh di atas mentakrifkan Gate bernama "update-post" untuk menentukan sama ada pengguna semasa mempunyai kebenaran untuk mengubah suai artikel. Syarat penghakiman ialah ID pengguna semasa adalah sama dengan ID pengarang artikel.

Apabila menggunakan Gate untuk menentukan kebenaran, anda boleh terus menggunakan kaedah kebenaran:

public function update(Request $request, Post $post)
{
    $this->authorize('update-post', $post);

    //...
}
Salin selepas log masuk

Pada masa ini, jika pengguna semasa tidak mempunyai kebenaran untuk mengubah suai artikel, pengecualian 403 akan dibuang. Jika anda perlu menyesuaikan maklumat pengecualian, anda boleh memasukkan parameter ketiga dalam teks, seperti:

$this->authorize('update-post', $post, '你没有权限修改这篇文章');
Salin selepas log masuk

Pada masa ini, jika pengguna semasa tidak mempunyai kebenaran untuk mengubah suai artikel, pengecualian 403 akan dilemparkan, dan mesej pengecualian ialah "Anda tidak mempunyai kebenaran untuk mengubah suainya" artikel ini".

Dalam contoh di atas, kami menggunakan penghantaran langsung objek $post untuk penentuan kebenaran. Sudah tentu, jika anda perlu lulus parameter lain untuk penghakiman kebenaran, anda juga boleh menghantar data tambahan dalam bentuk tatasusunan melalui parameter ketiga:

$this->authorize('update-post', ['post' => $post, 'extra_data' => 'foo']);
Salin selepas log masuk

Apabila menilai di Gate, anda boleh mendapatkan data yang diluluskan melalui parameter kedua:

Gate::define('update-post', function ($user, $post, $extra_data) {
    // can access $extra_data['extra_data'] here
    return $user->id === $post->user_id;
});
Salin selepas log masuk

Kecuali Sebagai tambahan kepada Gate, Laravel juga menyediakan kelas lain yang dipanggil Polisi, yang juga boleh digunakan untuk melaksanakan kebenaran. Sebaliknya, Dasar adalah lebih fleksibel dan membolehkan pembangun melaksanakan kawalan kebenaran yang lebih terperinci dengan mentakrifkan kaedah awam yang dipanggil boleh:

class PostPolicy
{
    public function canUpdate($user, Post $post)
    {
        return $user->id === $post->user_id;
    }
}
Salin selepas log masuk

Pada masa ini, apabila menggunakan Gate untuk penghakiman kebenaran, anda boleh menggunakan kaedah dasar, Associate Gate dan Dasar:

Gate::policy(Post::class, PostPolicy::class);

$this->authorize('update', $post);
Salin selepas log masuk

Dalam contoh di atas, kami mengaitkan kelas Gate dan PostPolicy melalui kaedah dasar, supaya apabila kami menggunakan kaedah kebenaran, Laravel akan secara automatik memanggil kaedah canUpdate PostPolicy untuk menentukan kebenaran . Pada masa ini, jika pengguna semasa tidak mempunyai kebenaran untuk mengubah suai artikel, pengecualian 403 akan dibuang.

  1. Cara melaksanakan pengurusan kebenaran merentas sistem

Dalam aplikasi sebenar, mungkin perlu untuk memindahkan maklumat kebenaran daripada satu sistem ke sistem yang lain. Sebagai contoh, apabila kami telah melengkapkan pengesahan dan kebenaran dalam sistem A, kami kini perlu melaksanakan operasi dalam sistem B, tetapi kami tidak mahu pengguna perlu mengesahkan dan membenarkan lagi. Pada masa ini, kami boleh memindahkan maklumat kebenaran dalam sistem A ke sistem B untuk mencapai pengurusan kebenaran yang lancar.

Dalam Laravel, kita boleh menggunakan JWT (JSON Web Token) untuk mencapai pengurusan kebenaran merentas sistem. JWT ialah standard terbuka untuk penghantaran maklumat yang selamat dalam persekitaran rangkaian. Ia menentukan cara menghantar maklumat berasaskan JSON dengan selamat melalui Internet. JWT terdiri daripada tiga bahagian iaitu header, payload dan signature. Antaranya, pengepala dan muatan ialah rentetan JSON yang dikodkan menggunakan Base64, manakala tandatangan ialah nilai cincang yang dijana daripada pengepala, muatan dan rahsia menggunakan algoritma penyulitan seperti HS256.

Dalam Laravel, kita boleh menggunakan pakej sambungan tymon/jwt-auth untuk mencipta dan menghuraikan JWT. Mula-mula, anda perlu memasang pakej sambungan tymon/jwt-auth:

composer require tymon/jwt-auth
Salin selepas log masuk

Selepas pemasangan selesai, kami perlu melakukan beberapa konfigurasi asas JWT. Ia boleh dikonfigurasikan dalam fail config/jwt.php, terutamanya termasuk:

  • rahsia: kunci penyulitan
  • ttl: Tempoh sah token, dalam beberapa minit
  • pembekal: pembekal pengguna, digunakan untuk mengesahkan identiti pengguna
return [
    // ...

    'secret' => env('JWT_SECRET', 'some-secret-string'),

    'ttl' => env('JWT_TTL', 60),

    'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),

    'providers' => [
        'users' => [
            'model' => AppModelsUser::class,
            'credentials' => ['email', 'password'],
        ],
    ],

    // ...
];
Salin selepas log masuk
f melengkapkan konfigurasi, kita boleh menjana JWT dalam satu sistem dan menghantarnya ke sistem lain. Dalam sistem lain, fungsi penghuraian JWT boleh digunakan untuk mendapatkan maklumat pengguna dan maklumat kebenaran dalam JWT. Khususnya, anda boleh menggunakan kaedah Auth::setUser untuk menetapkan maklumat pengguna yang dihuraikan sebagai pengguna semasa dan menggunakan Gate untuk menentukan kebenaran.

Berikut ialah contoh mudah:

Dalam sistem A, kita boleh menggunakan JWT untuk menjana Token dan menyerahkannya kepada Sistem B:

$token = JWTAuth::fromUser($user);

return redirect('http://system-b.com?token=' . $token);
Salin selepas log masuk

Dalam Sistem B, kita boleh menghuraikan Token daripada maklumat pengguna dan maklumat kebenaran :

use IlluminateSupportFacadesAuth;
use TymonJWTAuthFacadesJWTAuth;

$token = request()->get('token');

$user = JWTAuth::parseToken()->authenticate();

Auth::setUser($user);

// ...

Gate::authorize('update', $post);
Salin selepas log masuk

在上面的例子中,我们使用JWTAuth::parseToken()方法解析Token,成功后,通过authenticate()方法获取到用户信息,并使用Auth::setUser方法将用户信息设置为当前用户。最后,我们可以使用Gate的authorize方法判断当前用户是否有权限进行某些操作。

需要注意的是,为了保证传输安全,我们应该务必在传送Token时进行加密传输,或使用HTTPS协议进行通信。

  1. 如何实现跨域的权限验证

在实际应用中,由于系统之间的跨域限制,可能会导致无法直接进行权限验证。此时,我们可以使用跨域资源共享(CORS)解决跨域问题。CORS是一种允许服务器进行跨域访问的机制,可以通过在响应头中设置Access-Control-Allow-*等相关选项实现。

在Laravel中,要启用CORS,可以使用spatie/laravel-cors扩展包。首先需要安装该扩展包:

composer require spatie/laravel-cors
Salin selepas log masuk

然后,在config/cors.php文件中进行配置:

return [
    'paths' => ['api/*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,
];
Salin selepas log masuk

在完成配置后,我们可以在需要使用CORS的路由或控制器中添加CORS相关中间件:

Route::group(['middleware' => ['cors']], function () {
    // ...
});  

public function update(Request $request, Post $post)
{
    $this->authorize('update-post', $post);

    //...
}
Salin selepas log masuk

在上面的例子中,我们通过将路由或控制器添加到“cors”中间件组中,启用了CORS功能。此时,我们就可以支持跨域的权限验证了。

需要注意的是,为了避免出现安全问题,我们需要仔细配置CORS相关参数,确保只允许来自指定域名和端口的请求访问我们的系统。同时,我们也需要在服务器端使用CSRF和其他相关功能保护系统的安全。

以上就是Bagaimana untuk melaksanakan pengurusan keizinan sistem silang dan rentas domain dalam Laravel的详细介绍。需要说明的是,本文只是提供了一些基本的实现思路和代码示例,具体的实现细节和方案根据实际的应用情况会有所不同。

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengurusan keizinan sistem silang dan rentas domain dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!