Ayman Mohamed7 نشر 24 ديسمبر 2024 أرسل تقرير نشر 24 ديسمبر 2024 أواجه مشكلة في استخدام 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)} اقتباس
0 بولا هاني نشر 15 يونيو أرسل تقرير نشر 15 يونيو مرحبا ايمن. لإضافة تحقق من 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 الصحيح سيتمكن من تنفيذ العملية اتمني ان يعجبك شرحي اقتباس
السؤال
Ayman Mohamed7
أواجه مشكلة في استخدام api_key . هذا الكود يعمل بشكل جيد ولكني لم استطع اضافة انه المستخدم الذي يستخدم الtoken فقط ولديه صلاحيات الإنشاء يمكنه الاتصال بالدالة وانشاء نسخة جديدة .
فكيف يمكنني استخدام api_key ؟
الاصدار المستخدم هو odoo 16
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.