Давайте начнем с нуля, создав игрушечный модуль с именем my_module
.
Сначала нам нужно создать модель.Файл addons/my_module/models/models.py
содержит:
from odoo import api, fields, models, tools, _
class Books(models.Model):
_name = 'my_module.books'
title = fields.Char(string='Title')
author = fields.Char(string='Author')
Теперь мы можем создавать меню, действия и представления.Файл addons/my_module/views/views.xml
содержит:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Top menu item -->
<menuitem name="My top menu" id="my_module.menu_root"/>
<!-- menu categories -->
<menuitem name="My left-side menu" id="my_module.menu_left" parent="my_module.menu_root"/>
<!-- Model Books: views, actions and menus -->
<!-- explicit tree view definition -->
<record model="ir.ui.view" id="my_module.books_view_tree">
<field name="name">My books - List view</field>
<field name="model">my_module.books</field>
<field name="arch" type="xml">
<tree>
<field name="title"/>
<field name="author"/>
</tree>
</field>
</record>
<!-- explicit form view definition -->
<record model="ir.ui.view" id="my_module.books_view_form">
<field name="name">My books - Form view</field>
<field name="model">my_module.books</field>
<field name="arch" type="xml">
<form string="My books">
<sheet>
<group>
<field name="title"/>
<field name="author"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- action opening views for this model -->
<record model="ir.actions.act_window" id="my_module.books_action_window">
<field name="name">My Books - Window action</field>
<field name="res_model">my_module.books</field>
<field name="view_mode">tree,form</field>
</record>
<!-- menu for the above action -->
<menuitem name="Books" id="my_module.menu_books" parent="my_module.menu_left" action="my_module.books_action_window" sequence="6" />
</data>
</openerp>
Тогда нам нужен манифест.Файл addons/my_module/__manifest__.py
содержит:
{
'name': "my_module",
'summary': "Answer to Stack Overflow Question 52733625",
'description': "Answer to Stack Overflow Question 52733625",
'author': "Adán Cortés Medina",
'website': "http://www.linkedin.com/in/1acme",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/9.0/openerp/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['website'],
# always loaded
'data': [
'views/views.xml',
#'security/ir.model.access.csv',
],
# only loaded in demonstration mode
'demo': [
#'demo/demo.xml',
],
}
На данный момент вы, скорее всего, захотите создать новую базу данных и загрузить модуль.Сверху будет меню с именем My top menu
, слева будет надпись «1017 *», а под ним будет меню «1018 *», которое, когда вы щелкнете по нему, отобразит список книг.Модель будет показана.Кроме того, когда вы нажимаете кнопку Create
, вам будет показан вид формы для указанной модели.
После того, как она будет протестирована, давайте добавим защиту.Сначала перейдите к файлу __manifest__.py
и раскомментируйте #'security/ir.model.access.csv',
, удалив начальный #
.Затем создайте addons/my_module/security/ir.model.access.csv
со следующим содержимым:
"id","name","model_id/id","group_id/id","perm_read","perm_write","perm_create","perm_unlink"
"access_my_module_books","my_module.books","my_module.model_my_module_books","base.group_portal","True","True","True","True"
Перезапустите Odoo, просто чтобы быть в безопасности, а затем перейдите в меню Apps
и перезагрузите модуль, нажав сначала на его карточку, а затемна кнопке Upgrade
.
Теперь войдите в режим отладки, добавив debug
непосредственно перед #
(URL должен быть похож на http://example.com:8096/web?debug#...) и создайте пользователя, убедившись в этомпринадлежит к группе портала (Другое Extra Rights/Portal
должно быть отмечено). Нажмите кнопку Save
. Найдите раскрывающееся меню Action
в верхней части формы и выберите Change password
. Введите пароль, нажмитена Save
.
Затем откройте новое окно инкогнито (чтобы можно было одновременно открыть две учетные записи Odoo) и войдите в систему с пользователем, которого вы только что создали. Там должно появиться меню Книги.
Наконец, создайте нового пользователя, не принадлежащего к группе Portal, войдите в систему с этим пользователем и убедитесь, что меню «Книги» не отображается.
Вы можете скачать вышеупомянутый игрушечный модуль с https://github.com/AdanCortes/stackoverflow/tree/q52733625