使用组隐藏字段

问题描述

我想为不在组中的某些用户隐藏该字段。 字段:电话,模块:res_partner

为此,我通过添加组来覆盖该字段:

from odoo import api,fields,models


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

    phone = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')

创建的组:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="0">
         <record id="group_contact_user" model="res.groups">
            <field name="name">User</field>
            <field name="category_id" ref="base.module_category_contacts"/>
            <field name="implied_ids" eval="[(4,ref('base.group_user'))]"/>
        </record>

        <record id="group_contact_manager" model="res.groups">
            <field name="name">Manager</field>
            <field name="category_id" ref="base.module_category_contacts"/>
            <field name="implied_ids" eval="[(4,ref('group_contact_user'))]"/>
            <field name="users" eval="[(4,ref('base.user_root'))]"/>
        </record>

        <record id="field_invisible_from_contacts" model="res.groups">
            <field name="name">Field invisible from contacts</field>
            <field name="users" eval="[(4,ref('base.user_root'))]"/>
        </record>
    </data>
</odoo>

具有“用户”权限的“普通”用户。当我单击某些联系人时:错误:“域中的未知现场电话”为什么?

编辑:

  • 继承sms.partner_form_send_sms_form_view

      <odoo>
          <record id="partner_form_send_sms_form_view_secure" model="ir.ui.view">
              <field name="name">res.partner.form.send.sms.secure</field>
              <field name="model">res.partner</field>
              <field name="inherit_id" ref="sms.partner_form_send_sms_form_view"/>
              <field name="priority">10</field>
              <field name="arch" type="xml">
                  <xpath expr="//button[@name=%(sms.send_sms_form_action)d]" position="attributes">
                         <attribute name="groups">cmz_security_contacts.field_invisible_from_contacts</attribute>
                  </xpath>
              </field>
          </record>
      </odoo>
    
  • 覆盖phonemobile字段以设置groups属性

      from odoo import api,models
    
      class Partner(models.Model):
          _inherit = 'res.partner'
    
          phone = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')
          mobile = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')  
    

如何在mobile中找到partner_form_send_sms_form_view按钮?

解决方法

我想您没有在域中使用电话字段。

许多视图继承了合作伙伴视图,sms.partner_form_send_sms_form_view视图添加了一个按钮(Send SMS),该按钮使用attrs(attrs="{'invisible':[('phone','=',False)]}")中的电话字段。

即使您进行了更改,看板视图中也会出现错误(TypeError: dict.record.phone is undefined),该错误会检查phone字段值(t-if="record.phone.raw_value">),但是您只需检查一下即可避免如果在尝试获取其值之前电话字段存在。

您需要根据您的更改更新合作伙伴视图,因为您仅将字段访问权限限制为给定组的用户。

,

肯尼,我要隐藏“电子邮件”:

email = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')

但是当我选择一个联系人时: 由于安全限制,无法完成请求的操作。请与您的系统管理员联系。

(文档类型:联系人,操作:读取)-(用户:125,字段:电子邮件) 如果仅在字段上设置了限制,为什么会收到此消息? 为什么我没有在田野电话和手机上使用它? 谢谢。