اذهب إلى المحتوى

السؤال

نشر

لدي مشروع لارافيل وواجهة المستخدم مبنية من خلال Vue JS. يتم التحقق من المستخدمين عن طريق passport في لارافيل من جهة الخادم. ولدي أنماط مختلفة من المستخدمين وكل نمط له صلاحيات مختلفة

    Passport::tokensCan([
        'user' => 'User',
        'customer' => 'Customer',
        'admin' => 'Admin',
    ]);

كيف يمكنني تطبيق ذلك من خلال passport scope وإضافة صلاحيات مختلفة لكل نوع من المستخدمين؟ وهل roles مختلفة هنا عن scopes؟

Recommended Posts

  • 0
نشر

يمكن إضافة الصلاحيات لكل مستخدم ضمن التابع boot في AuthServiceProvider بالشكل التالي:

Passport::tokensCan([
    'manage-order' => 'Manage order scope'
    'read-only-order' => 'Read only order scope'
]);

وضمن مسارات التوجيه نقوم بإضافة guard ضمن الوسيط يتضمن السكوب على حسب الصلاحيات التي يمكن استخدامها من قبل المستخدم:


->middleware(['auth:api', 'scopes:your-scope=key-here']);

فتصبح مسارات التوجيه بالشكل التالي:

Route::get('/api/orders', 'OrderController@index')
    ->middleware(['auth:api', 'scopes:manage-order']);
Route::post('/api/orders', 'OrderController@store')
    ->middleware(['auth:api', 'scopes:manage-order']);
Route::get('/api/orders/{id}', 'OrderController@show')
    ->middleware(['auth:api', 'scopes:manage-order, read-only-order']);

وللتحقق من صلاحيات المستخدم، يمكننا ضمن المتحكّم الخاص بعملية تسجيل الدخول إضافة التالي:

$role = $user->checkRole();

        
        if ($role == 'admin') {
            $request->request->add([
                'scope' => 'manage-order' // نقوم هنا بإضافة السكوب الخاص بنوع المستخدم
            ]);
        } else {
            $request->request->add([
                'scope' => '.....'
            ]);
        }

        // تحويل الطلب وإضافة token
        $tokenRequest = Request::create(
            '/oauth/token',
            'post'
        );
        return Route::dispatch($tokenRequest);

حيث سيتم التعرّف على صلاحيات المستخدم بعد إنشاء token الخاص به وتمريره مع الطلبات الواردة إلى خادم الويب باستخدام الترويسة Bearer بشكل مشابه للتالي:

$response = $client->request('GET', '/api/endpoint', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...