2016-11-16 18 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

の予備的な名前で、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のデフォルトの安全な権限のために、あなたのデータは少なくともこれで安全であるということです。私はまた、基本的なセッション機能&のテストは、すべてのタブでログアウトしてから別のタブをブラウズする場合の通常とは少し違うエラーの外で、正常に動作するように見えると言うこともできます。

私が言うことができないことは、これがセッションの端の場合に意図しない副作用があることです。予備試験はうまくいったようですが、明らかに遠い結果が出る可能性があります。

モジュールは、あなたの質問は何web_session_allow_public

関連する問題