You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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',
        ],
    },
}

最后步骤

  1. 在Odoo中创建限制拖拽的用户组(比如group_restricted_kanban_drag),将需要禁用拖拽权限的用户添加到该组。
  2. 升级模块,测试不同用户组的拖拽权限:管理员/允许拖拽的用户组可正常拖拽,限制组用户无法拖拽。

内容的提问来源于stack exchange,提问作者Juniorzkie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:27:16