مرحبا ايمن.
لإضافة تحقق من 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 الصحيح سيتمكن من تنفيذ العملية
اتمني ان يعجبك شرحي