Search code examples
permissionsodooodoo-11

Odoo11 - Use method on model backend from website by not logged user


I use Odoo 11 and i need to call some methods declared into models of backend from website by a not logged user..

Into controller i used the paramenter auth="public" and some .sudo() into write and search....and all works great, but i have some methods called by javascript into backend that when a not logged user trigger that methods i receive this error:

/11.0/OCB/odoo/addons/base/ir/ir_http.py(90)_auth_method_user()
raise http.SessionExpiredException("Session expired")

There is something that can i do? The backend have the sudo().write() too or sudo().search() but still get the error.... with a logged Porta user no problems, but i need to let usable from not logged users!

This is the method that send me the error message from model ir.http

@classmethod
def _auth_method_user(cls):
    request.uid = request.session.uid
    if not request.uid:
        raise http.SessionExpiredException("Session expired")

Solution

  • I solved the problem by moving all backends methods into controllers with paramenter auth="public" and this let me to make action without auth permissions.

    @http.route("/save_values",
                    type="json",
                    auth="public",
                    website=True)
        def save_values(self, value_from_js):
            checklist_line_obj = request.env['worksheet.checklist.line']
            for line_id in value_from_js:
                line = checklist_line_obj.browse(int(line_id))
                vals = value_from_js[line_id]
    
                line.sudo().write(vals)
    

    And Here the Javascript that call the Controller:

    ajax.jsonRpc("/save_values", "call", {"value_from_js": dataToSendWorksheet})
                        .then(function () {
                            //DO something
                        });