Руководство по безопасности

Ресурсы:

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

На уровне полей / меню мы можем:
  • скрыть поля или меню для одних пользователей и показать их для других
  • сделать поля доступными для чтения только для некоторых пользователей и сделать их редактируемыми для других
  • показать разные варианты выбора в полях выбора для разных пользователей

На полях уровня безопасности используются модели `` res.users`` и `` res.groups``. Эти модели относятся друг к другу так же, как и многие другие. Это означает, что пользователь может быть членом многих групп, и одна группа может быть назначена многим пользователям.

Одним из примеров того, как мы можем скрыть меню в отношении групп текущего пользователя, является следующее.

../../_images/hide_menu.png

На картинке выше в `` Settings / Users`` мы видим только меню `` Users``. Мы знаем, что должно быть меню `` Groups``. Давайте посмотрим в . / Openerp / addons / base / res / res_users_view.xml о том, как пункт меню можно скрыть.

<record id="action_res_groups" model="ir.actions.act_window">
   <field name="name">Groups</field>
   <field name="type">ir.actions.act_window</field>
   <field name="res_model">res.groups</field>
   <field name="view_type">form</field>
   <field name="help">A group is a set of functional areas that will be assigned to the
   user in order to give them access and rights to specific applications and tasks in
   the system. You can create custom groups or edit the ones existing by default
   in order to customize the view of the menu that users will be able to see. Whether
   they can have a read, write, create and delete access right can be managed from here.
</field>
</record>
<menuitem action="action_res_groups" id="menu_action_res_groups" parent="base.menu_users"
groups="base.group_no_one"/>

Атрибут `` groups`` в элементе `` menuitem`` показывает, что только члены группы `` base.group_no_one`` могут видеть пункт меню `` Groups``. Xmlid `` base.group_no_one`` 'определен в . / Openerp / addons / base / security / base_security.xml следующим образом.

<record model="res.groups" id="group_erp_manager">
    <field name="name">Access Rights</field>
</record>
<record model="res.groups" id="group_system">
    <field name="name">Settings</field>
    <field name="implied_ids" eval="[(4, ref('group_erp_manager'))]"/>
    <field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>

<record model="res.groups" id="group_user">
    <field name="name">Employee</field>
    <field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>

<record model="res.groups" id="group_multi_company">
    <field name="name">Multi Companies</field>
</record>

<record model="res.groups" id="group_multi_currency">
    <field name="name">Multi Currencies</field>
</record>

<record model="res.groups" id="group_no_one">
    <field name="name">Technical Features</field>
</record>

<record id="group_sale_salesman" model="res.groups">
    <field name="name">User</field>
</record>
<record id="group_sale_manager" model="res.groups">
    <field name="name">Manager</field>
    <field name="implied_ids" eval="[(4, ref('group_sale_salesman'))]"/>
</record>

Здесь мы можем увидеть `` group_no_one`` вместе с другими базовыми группами. Обратите внимание, что `` group_no_one`` имеет название `` Technical Features``. Давайте включим нашего пользователя в группу «Технические характеристики». Поскольку у нас нет доступа к пункту меню `` Groups``, единственный способ сделать это - это пункт меню `` Users``. Смотрите картинку ниже.

../../_images/technical_features.png

Установите флажок `` Технические характеристики`` и перезагрузите odoo. Теперь мы можем видеть пункт меню `` Groups``!

../../_images/show_menu.png

Из `` Настройки / Пользователи / Группы`` мы можем увидеть список существующих групп. Здесь мы также можем назначить пользователей для групп.

Скрыть поля

В . / Openerp / addons / base / res / res_users_view.xml мы можем видеть представление `` view_users_simple_form``. Обратите внимание, что поле `` company_id`` видимо только для членов группы `` base.group_multi_company``.

<!-- res.users -->
<record id="view_users_simple_form" model="ir.ui.view">
    <field name="name">res.users.simplified.form</field>
    <field name="model">res.users</field>
    <field name="priority">1</field>
    <field name="arch" type="xml">
        <form string="Users">
            <sheet>
                <field name="id" invisible="1"/>
                <div class="oe_form_box_info oe_text_center" style="margin-bottom: 10px" attrs="{'invisible': [('id', '>', 0)]}">
                    You are creating a new user. After saving, the user will receive an invite email containing a link to set its password.
                </div>
                <field name="image" widget='image' class="oe_avatar oe_left" options='{"preview_image": "image_medium"}'/>
                <div class="oe_title">
                    <label for="name" class="oe_edit_only"/>
                    <h1><field name="name"/></h1>
                    <field name="email" invisible="1"/>
                    <label for="login" class="oe_edit_only" string="Email Address"/>
                    <h2>
                        <field name="login" on_change="on_change_login(login)"
                                placeholder="email@yourcompany.com"/>
                    </h2>
                    <label for="company_id" class="oe_edit_only" groups="base.group_multi_company"/>
                    <field name="company_id" context="{'user_preference': 0}" groups="base.group_multi_company"/>
                </div>
                <group>
                    <label for="groups_id" string="Access Rights"
                            attrs="{'invisible': [('id', '>', 0)]}"/>
                    <div attrs="{'invisible': [('id', '>', 0)]}">
                        <field name="groups_id" readonly="1" widget="many2many_tags" style="display: inline;"/> You will be able to define additional access rights by edi ting the newly created user under the Settings / Users menu.
                    </div>
                    <field name="phone"/>
                    <field name="mobile"/>
                    <field name="fax"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

Наш текущий пользователь - Администратор. По умолчанию он не является членом группы `` base.group_multicompany``. Вот почему `` company_id`` не отображается для него в форме.

../../_images/view_users_simple_form_before.png
Модельные записи:
  • ограничить доступ к указанному подмножеству записей в модели
Модель:
  • ограничить доступ ко всем записям модели