Скрыть поле с помощью группы

#python #xml #odoo-12

#python #xml #odoo-12

Вопрос:

Я хочу скрыть поле для некоторых пользователей, которые не входят в группу. Поле: телефон, модуль: 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>
      
  • Переопределение phone и mobile полей для установки groups атрибута

       from odoo import api, fields, 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 ?

Комментарии:

1. Как вы использовали phone поле в представлениях?

2. Кенли, это описано в base> views> res_partner_views

3. Итак, ошибка возникла не из вашего определения XML, проблема заключается в доступе к полю. Проверьте мой ответ ниже (рекомендация была слишком длинной)

Ответ №1:

Я полагаю, вы не использовали поле телефона в домене.

Многие представления наследуют представление партнера, sms.partner_form_send_sms_form_view представление добавляет кнопку ( Send SMS ), которая использует поле телефона в attrs ( attrs="{'invisible':[('phone', '=', False)]}" ).

Даже если вы измените это, в представлении kanban будет ошибка ( TypeError: dict.record.phone is undefined ), которая проверяет phone значение поля ( t-if="record.phone.raw_value"> ), но вы можете просто избежать этого, проверив, существует ли поле phone, прежде чем пытаться получить его значение.

Вам необходимо обновить представление партнера в соответствии с вашими изменениями, потому что вы ограничили доступ к полю только для пользователей указанных групп.

Комментарии:

1. Kenly, т.е. там, где используется это поле, я должен проверить, имеет ли пользователь право?

2. Да, вам нужно изменить этот код. В заголовке вашего вопроса указано, Hide field using group но groups атрибут используется для ограничения доступа к полю только для пользователей указанных групп. Если вам нужно использовать атрибут groups, вам нужно будет изменить код в зависимости от поля phone, например, в модуле SMS кнопка Send SMS отображается, когда задано значение поля phone, поэтому попробуйте ограничить доступ к этой кнопке с помощью групп в родительском div.

3. Кенли, это работает для поля «телефон», но для поля «мобильный» нет :((

4. Вам также нужно ограничить доступ к мобильному полю?

5. Вы можете использовать //div[@class='o_row'][2]/button выражение для выбора второй кнопки.

Ответ №2:

Кенли, я хочу скрыть «электронную почту»:

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

Но когда я выбираю контакт:
Запрошенная операция не может быть завершена из-за ограничений безопасности. Пожалуйста, свяжитесь с вашим системным администратором.

(Тип документа: Контакт, Операция: чтение) — (Пользователь: 125, Поля: электронная почта) Почему я получаю это сообщение, если ограничение установлено только для поля? Почему я не получил его для полей phone и mobile? Спасибо.

Комментарии:

1. Если это часть вашего вопроса, вам нужно просто отредактировать его и добавить больше деталей, если не задать новый вопрос. Я не был уведомлен, и чтобы уведомить меня, используя мое имя, вам нужно добавить @ в начале. Вы должны удалить этот ответ и отредактировать свой вопрос выше или задать новый.