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

Odoo 16如何为特定用户展示指定审批类型的审批看板

在Odoo 16中实现审批类型的用户级可见权限

这个需求完全可以通过系统设置或自定义编码两种方式实现,具体方案如下:

一、无需编码:通过权限组+记录规则实现

Odoo自带的权限体系足够实现这类精细化的可见控制,步骤如下:

  1. 标记跨审批类型
    先确保审批类型(approval.category模型)有区分“跨审批类型”的标识,比如新增布尔字段is_cross_approval,用来标记哪些属于跨审批类型。

  2. 创建专属权限组
    进入设置 > 用户与公司 > 权限组,新建两个组:

    • 组1:仅可见内部审批类型,关联approval.category模型的对应权限(只读/读写按需选择)
    • 组2:可见全部审批类型,关联approval.category模型的完整权限
  3. 添加限制型记录规则
    进入设置 > 用户与公司 > 记录规则,针对approval.category模型创建规则:

    • 规则名称:隐藏跨审批类型
    • 应用到组:选择仅可见内部审批类型
    • 域:[('is_cross_approval', '=', False)](过滤掉标记为跨审批的类型)
    • 权限:勾选读取(确保该组用户只能看到符合条件的记录)
  4. 分配用户权限

    • 将用户A添加到仅可见内部审批类型组,同时移除该用户在可见全部审批类型组的权限(如有)
    • 将用户B添加到可见全部审批类型组,确保该用户不受上述限制规则影响

二、自定义编码:适配复杂逻辑场景

如果跨审批类型的判断逻辑复杂(比如基于用户部门、审批流程关联等动态条件),可以通过编码实现更灵活的控制:

方案1:动态过滤读取域

from odoo import models, api

class ApprovalCategory(models.Model):
    _inherit = 'approval.category'

    @api.model
    def _get_domain_for_read(self):
        domain = super()._get_domain_for_read()
        # 替换为用户A的实际ID或登录名判断
        if self.env.user.id == 10:
            domain += [('is_cross_approval', '=', False)]
        return domain

方案2:重写搜索方法

from odoo import models, api

class ApprovalCategory(models.Model):
    _inherit = 'approval.category'

    @api.model
    def search(self, args, offset=0, limit=None, order=None, count=False):
        if self.env.user.login == 'user_a':
            args += [('is_cross_approval', '=', False)]
        return super().search(args, offset=offset, limit=limit, order=order, count=count)

方案3:视图层面动态过滤

<record id="view_approval_category_tree_custom" model="ir.ui.view">
    <field name="name">approval.category.tree.custom</field>
    <field name="model">approval.category</field>
    <field name="inherit_id" ref="approval.view_approval_category_tree"/>
    <field name="arch" type="xml">
        <xpath expr="//tree" position="attributes">
            <attribute name="domain">[('is_cross_approval', '=', False) if user.id == 10 else []]</attribute>
        </xpath>
    </field>
</record>

系统设置方案更易维护,适合逻辑固定的场景;编码方案灵活性更高,可应对复杂的动态判断需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:20:10