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

Odoo 15如何将字段写入权限限制至指定用户组?

Odoo 15 自定义字段写入权限限制(指定用户组ID46)

方案一:模型计算字段+视图attrs控制(无需Studio)

1. 在对应模型中添加计算字段

假设你的字段挂在res.partner模型下,在自定义模块的Python文件中加入以下代码:

from odoo import models, fields

class ResPartner(models.Model):
    _inherit = 'res.partner'

    # 计算字段:判断当前用户是否属于ID46的组
    user_in_target_group = fields.Boolean(compute='_compute_user_in_target_group')

    def _compute_user_in_target_group(self):
        # 获取目标用户组
        target_group = self.env['res.groups'].browse(46)
        # 判定当前用户是否在组内
        has_access = self.env.user in target_group.users
        # 给每条记录赋值
        for record in self:
            record.user_in_target_group = has_access

2. 修改视图字段定义

把原视图中的字段代码修改为:

<field name="customer_codename" placeholder="Codename" 
       attrs="{'invisible':['|',('customer_rank','=', 0),('is_company','=', False)],
               'readonly': [('user_in_target_group', '=', False)]}"/>

非目标组用户打开表单时,该字段会自动变为只读状态,无法编辑。

方案二:直接在字段定义中设置groups参数(全局权限控制)

如果不需要结合视图的invisible逻辑,可直接在Python字段定义里指定允许编辑的用户组:

from odoo import models, fields

class ResPartner(models.Model):
    _inherit = 'res.partner'

    # 用目标组的外部ID赋值(推荐),临时可用导出的ID替代
    customer_codename = fields.Char(groups='__export__.res_groups_46_eff9dc52')

提示:__export__.xxx是导出生成的临时外部ID,建议找到组的正式外部ID(如自定义组的模块名.组名)替换,避免后续ID变动导致权限失效。

你之前尝试失败的原因

Studio创建布尔字段时,代码存在两处问题:

  1. 未给字段赋值:需要把判断结果明确赋值给record.你的布尔字段名
  2. 依赖项错误:判断当前用户组不需要依赖记录的user_id,依赖项可以留空

正确的Studio计算字段代码应为:

for record in self:
    record.x_your_boolean_field = self.env.user.has_group('__export__.res_groups_46_eff9dc52')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:45:52