2016-11-16 3 views
1

내 JS에서 RPC를 통해 모델 데이터로드가 필요합니다.익명 사용자에게 rpc api에 액세스하는 방법

이 컨트롤러는 인증 된 사용자 만 허용되기 때문에이

ajax.jsonRpc("/web/dataset/call_kw", 'call', { 
      model: 'res.partner.category', 
      method: 'search_read', 
[...] 

당신이 SessionExpiredError을받을 수 있나요합니다. 이 문제를 해결하려면 API가 이미 있으므로 불쌍한 상황이 발생할 때마다 사용자 정의 컨트롤러를 정의해야합니다.

나는이 순간에 다음 해결 방법 :

JS :

ajax.jsonRpc("/web/dataset/call_kw_pub", 'call', { 
      model: 'res.partner.category', 
      method: 'search_read', 
[...] 

PY :

from openerp.addons.web.controllers.main import DataSet as DataSetBase 

class DataSet(DataSetBase): 
    @http.route([ 
     '/web/dataset/call_kw_pub', 
     '/web/dataset/call_kw_pub/<path:path>' 
    ], type='json', auth="public") 
    def call_kw_pub(self, model, method, args, kwargs, path=None): 
     if model not in ('partner.project.expertise', 'res.partner.category'): 
      return http.request.not_found() 
     return self._call_kw(model, method, args, kwargs) 

모델의 액세스 권한이 아니라 ACL에 의해하지만 난 안전하게 유지하는 처리 보인다 일부 모델에서만이 기능을 사용할 수 있습니다.

보안 수준에서 문제가되지 않는다면 표준 컨트롤러에 대한 공개 액세스 허용을 고려할 수 있습니다. 어떤 포인터?

이는 https://github.com/OCA/web/pull/402과 관련이있을 수도

+0

질문은 무엇입니까 web_session_allow_public의 예비 이름으로, this pull request에에에 근무하고 있습니다? – Amy

+0

제목에 질문이 있습니다.) 어쨌든 텍스트 끝에 물음표를 추가했습니다. – simahawk

+0

[this] (https://www.odoo.com/page/responsible-disclosure)를 읽어야합니다. 나는 이것이 SO에 속한다고 생각하지 않는다. – CZoellner

답변

0

나는이 기능을 제공하는 모듈 일하고 있지만, 사람이 빠르게 할보고 더러운 다음 코드를 사용하여 수행 할 수 있습니다 :

from openerp import models 
from openerp.http import SessionExpiredException 


class IrHttp(models.Model): 

    _inherit = 'ir.http' 

    def _auth_method_user(self): 
     try: 
      return super(IrHttp, self)._auth_method_user() 
     except SessionExpiredException: 
      return self._auth_method_public() 

위의 예는 사용자 인증을 시도한 다음 SessionExpiredError에서 공개 사용자로 명시 적으로 다시 인증합니다. 이 방법은 RPC 세션 인증에 사용되며 이는 실패 할 때 발생하는 오류입니다. 또한이 오류는 공개 사용자에 대한 인증이 실패 할 때만 발생합니다.

그러나 오류의 이름을 지정하면 아직 완전히 확인되지 않은이 해킹을 사용하는 것과 관련된 몇 가지 가능한 의미가 있다고 생각됩니다.

내가 말할 수있는 것은 귀하의 데이터가 적어도 Odoo의 기본 보안 권한 때문에 안전하다는 것입니다. 또한 기본 세션 기능 & 검사가 모두 정상적으로 작동하는 것처럼 보일 수 있습니다. 하나의 탭에서 로그 아웃 한 다음 다른 탭에서 검색하는 경우 정상적인 경우와 약간 다른 오류가 발생합니다.

내가 말할 수없는 것은 의도하지 않은 부작용이 세션의 가장자리에 미치는 영향입니다. 예비 테스트는 괜찮은 것처럼 보였지만 확실히 광범위한 결과가 발생할 수 있습니다.

모듈은

관련 문제