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创建布尔字段时,代码存在两处问题:
- 未给字段赋值:需要把判断结果明确赋值给
record.你的布尔字段名 - 依赖项错误:判断当前用户组不需要依赖记录的
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
相关产品推荐
相关产品推荐

