Files
odoo_source/addons/web_editor/controllers/bus.py
T
Nicolas Bayet 344d82ca25 [IMP] web_editor: add collaborative feature
This commit allows to use the editor collaboratively for any html
field in peer to peer using webRTC.

task-2497931

closes odoo/odoo#75768

Signed-off-by: Antony Lesuisse (al) <al@openerp.com>
2021-09-06 19:42:56 +00:00

42 lines
1.8 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import re
from odoo.http import request
from odoo.addons.bus.controllers.main import BusController
from odoo.exceptions import AccessDenied
class EditorCollaborationController(BusController):
# ---------------------------
# Extends BUS Controller Poll
# ---------------------------
def _poll(self, dbname, channels, last, options):
if request.session.uid:
# Do not alter original list.
channels = list(channels)
for channel in channels:
if isinstance(channel, str):
match = re.match(r'editor_collaboration:(\w+(?:.\w+)*):(\w+):([\d]+)', channel)
if (match):
model_name = match[1]
field_name = match[2]
res_id = int(match[3])
# Verify access to the edition channel.
if not request.env.user.has_group('base.group_user'):
raise AccessDenied()
document = request.env[model_name].browse([res_id])
document.check_access_rights('read')
document.check_field_access_rights('read', [field_name])
document.check_access_rule('read')
document.check_access_rights('write')
document.check_field_access_rights('write', [field_name])
document.check_access_rule('write')
channels.append((request.db, 'editor_collaboration', model_name, field_name, res_id))
return super(EditorCollaborationController, self)._poll(dbname, channels, last, options)