如何在Odoo 17看板视图中限制特定用户组拖拽记录?
解决Odoo 17看板视图特定用户组拖拽限制问题
直接全局设置records_draggable="false"会禁用所有用户的拖拽功能,要实现仅限制特定用户组,需要结合权限组判断和视图/JS扩展来动态控制,以下是两种可行方案:
方案一:通过计算字段+视图属性控制
1. 模型层添加计算字段
在你的业务模型中新增一个布尔计算字段,用于判断当前用户是否具备拖拽权限:
from odoo import models, fields, api class YourModel(models.Model): _name = 'your.model.name' # 替换为你的模型名 _inherit = ['mail.thread', 'mail.activity.mixin'] # 按需继承 can_drag_kanban = fields.Boolean(compute='_compute_can_drag_kanban', store=False) @api.depends_context('uid') def _compute_can_drag_kanban(self): # 替换为你创建的限制拖拽用户组的外部ID restricted_group = self.env.ref('your_module.group_restricted_kanban_drag') for record in self: # 用户在限制组内则禁用拖拽 record.can_drag_kanban = not self.env.user.has_group('your_module.group_restricted_kanban_drag')
2. 调整看板视图XML
移除原看板标签中的records_draggable属性,添加字段引用并通过模板继承动态设置拖拽属性:
<kanban default_group_by="x_studio_stage_id" default_order="x_studio_priority desc, x_studio_sequence asc, id desc"> <!-- 引入计算字段 --> <field name="can_drag_kanban"/> <templates> <!-- 继承看板卡片模板 --> <t t-name="kanban-box" inherit_id="web.KanbanView.Group"> <xpath expr="//div[hasclass('oe_kanban_global_click')]" position="attributes"> <!-- 根据字段值动态设置拖拽权限 --> <attribute name="t-att-data-draggable" t-esc="record.can_drag_kanban ? 'true' : 'false'"/> </xpath> </t> </templates> </kanban>
方案二:通过JS扩展控制器全局控制
如果不想修改模型字段,可直接通过JS扩展看板控制器,根据用户组动态设置拖拽权限:
1. 编写JS扩展文件
在模块的static/src/js/目录下创建restrict_kanban_drag.js:
odoo.define('your_module.restrict_kanban_drag', function (require) { "use strict"; const KanbanController = require('web.KanbanController'); const session = require('web.session'); KanbanController.include({ init: function () { this._super.apply(this, arguments); // 检查当前用户是否在限制组内 this.canDrag = !session.user_has_group('your_module.group_restricted_kanban_drag'); }, _getRendererProps: function () { const props = this._super.apply(this, arguments); // 动态传递拖拽权限给渲染器 props.recordsDraggable = this.canDrag; return props; }, }); });
2. 在模块manifest中加载JS
修改__manifest__.py,将JS文件加入后端资源:
{ 'name': 'Your Module', 'version': '1.0', 'depends': ['web'], 'data': [ 'views/your_model_views.xml', # 替换为你的视图文件路径 ], 'assets': { 'web.assets_backend': [ 'your_module/static/src/js/restrict_kanban_drag.js', ], }, }
最后步骤
- 在Odoo中创建限制拖拽的用户组(比如
group_restricted_kanban_drag),将需要禁用拖拽权限的用户添加到该组。 - 升级模块,测试不同用户组的拖拽权限:管理员/允许拖拽的用户组可正常拖拽,限制组用户无法拖拽。
内容的提问来源于stack exchange,提问作者Juniorzkie
相关产品推荐
相关产品推荐

