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

السؤال

نشر

أواجه مشكلة في استخدام api_key . هذا الكود يعمل بشكل جيد ولكني لم استطع اضافة انه المستخدم الذي يستخدم الtoken فقط ولديه صلاحيات الإنشاء يمكنه الاتصال بالدالة وانشاء نسخة جديدة .

فكيف يمكنني استخدام api_key ؟

الاصدار المستخدم هو odoo 16

class WarrantyApi(http.Controller):
    @http.route('/warranty/request', methods=['POST'], auth='none', type='json')
    def create_warranty_request(self):
        print("your ar in APi")
        args = request.httprequest.data.decode()
        vals = json.loads(args)
        print(vals)
        print(request.env.user.id)
        try:
            warranty_request = request.env['warranty.request'].sudo().create({
                    'customer_id': vals['customer_id'],
                    'product_id': vals['product_id'],
                    'purchase_date': vals['purchase_date'],
                    'warranty_period': vals['warranty_period'],
                    'issue_description': vals['issue_description'],
                    "request_status": vals['request_status']
            })

            return {'success': True, 'request_number': warranty_request.request_number}
        except Exception as e:
            return {'success': False, 'message': str(e)}

 

Recommended Posts

  • 0
نشر

مرحبا ايمن.

لإضافة تحقق من API Key بحيث يمكن للمستخدم الذي يحمل الـToken فقط ويملك صلاحيات الإنشاء أن ينشئ نسخة جديدة، تحتاج إلى تعديل الكود لإجراء مصادقة (Authentication). إليك الطريقة المناسبة لتطبيق ذلك في Odoo 16:

1. إضافة API Key في الطلب

عند إرسال الطلب من العميل، يجب أن يكون هناك Header يحتوي على API Key.

2. التحقق من API Key قبل تنفيذ العملية

يمكنك تحديث create_warranty_request بحيث يتحقق من صحة المفتاح أولاً:

python

import json
from odoo import http
from odoo.http import request

class WarrantyApi(http.Controller):
    @http.route('/warranty/request', methods=['POST'], auth='none', type='json')
    def create_warranty_request(self):
        # استخراج API Key من الـ Headers
        api_key = request.httprequest.headers.get('Authorization')

        # تحقق من صحة الـ API Key
        valid_api_key = request.env['res.users'].sudo().search([('api_key', '=', api_key)], limit=1)

        if not valid_api_key or not valid_api_key.has_group('your_module.group_create_warranty'):
            return {'success': False, 'message': 'Unauthorized: Invalid API Key or insufficient privileges'}

        try:
            args = request.httprequest.data.decode()
            vals = json.loads(args)
            warranty_request = request.env['warranty.request'].sudo().create({
                'customer_id': vals['customer_id'],
                'product_id': vals['product_id'],
                'purchase_date': vals['purchase_date'],
                'warranty_period': vals['warranty_period'],
                'issue_description': vals['issue_description'],
                'request_status': vals['request_status']
            })

            return {'success': True, 'request_number': warranty_request.request_number}
        except Exception as e:
            return {'success': False, 'message': str(e)}
 

3. إنشاء API Key للمستخدمين

في Odoo، يمكن للمستخدم إنشاء API Key من خلال إعدادات الحساب.

إذا كنت تدير صلاحيات، يمكنك إضافة مجموعة (Group) بحيث يمتلك المستخدم حق إنشاء الطلبات فقط إن كان لديه الصلاحية المناسبة.

4. إرسال الطلب الصحيح

عند إرسال طلب من العميل عبر Postman أو تطبيق خارجي، يجب تضمين Authorization في Headers بهذا الشكل:

Authorization: your_api_key_here

بهذه الطريقة، فقط المستخدم الذي يملك صلاحيات الإنشاء والـAPI Key الصحيح سيتمكن من تنفيذ العملية

 

اتمني ان يعجبك شرحي

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...