odoo - 为什么组在 <menuitem 组 ='' > 标签和 odoo 11 中的目的

标签 odoo

我正在尝试在 odoo11 中创建自定义模块,对菜单项中的 groups 属性有点困惑。

<menuitem id="product_menu_catalog"
          name="Catalog"
          action="product.product_template_action"
          parent="sale_menu_root"
          sequence="4"
         groups="sales_team.group_sale_salesman"
/>

最佳答案

groups与 Odoo 中的安全和访问权限相关。属于该组成员的用户可以看到为该组定义的所有内容。

它是如何工作的?

module category开头其中应包含 groups按模块分组

Odoo User Access Rights

  • ir.module.category

代码取自 ../odoo/addons/base/module/module_data.xml : (“销售”类别)

    <record model="ir.module.category" id="module_category_sales_management">
        <field name="name">Sales</field>
        <field name="description">Helps you handle your quotations, sale orders and invoicing.</field>
        <field name="sequence">1</field>
    </record>
  • 资源组

代码取自 ../addons/sales_team/security : (“用户:仅自己的文档”组)

    <record id="group_sale_salesman" model="res.groups">
        <field name="name">User: Own Documents Only</field>
        <field name="category_id" ref="base.module_category_sales_management"/>
        <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
        <field name="comment">the user will have access to his own data in the sales application.</field>
    </record>

<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>行说组中的每个人group_sale_salesmangroup_user 的一部分第二组。

  • ir.rule

然后,您可以创建一个规则,例如可以限制特定模型中组中用户的数据(模型:sale.order 在以下代码中由 ref="model_sale_order" 引用)

此外,在以下代码中,从 sale.order 提供的数据被过滤,以便用户仅获取他自己创建的订单或未定义 user_id 的订单。

代码取自 ../addons/sale/security :

<record id="sale_order_personal_rule" model="ir.rule">
    <field name="name">Personal Orders</field>
    <field ref="model_sale_order" name="model_id"/>
    <field name="domain_force">['|',('user_id','=',user.id),('user_id','=',False)]</field>
    <field name="groups" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
</record>

ir.model.access

您还可以在 csv 文件中为读取、写入、创建和删除记录的模型创建组访问权限,如 ../addons/account_analytic_default/security/ir.model.access.csv

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_analytic_default_salesman,account.analytic.default.salesman,model_account_analytic_default,sales_team.group_sale_salesman,1,1,1,1

在 python 代码中

例如,在 python 代码中,您可以检查执行该方法的用户是否属于某个组,如 ../addons/sale/models/product_product.py

@api.multi
def _sales_count(self):
    r = {}
    if not self.user_has_groups('sales_team.group_sale_salesman'):
        return r
    domain = [
        ('state', 'in', ['sale', 'done']),
        ('product_id', 'in', self.ids),
    ]
    for group in self.env['sale.report'].read_group(domain, ['product_id', 'product_uom_qty'], ['product_id']):
        r[group['product_id'][0]] = group['product_uom_qty']
    for product in self:
        product.sales_count = r.get(product.id, 0)
    return r

最后 @Charif DZ answered

groups is a syntax sugar to quickly add access rights to the menu, you can do this not just in menu also in fields definition in py File, any tag that can be used in the view,

groups="goup1_xml_id1,goup1_xml_id2,..." 

And If you want to remove a group from predefined field in another Module use - before the XML-ID of the group:

field_name = fields.TypeOfField(groups="-some_xml_group_id")

关于odoo - 为什么组在 <menuitem 组 ='' > 标签和 odoo 11 中的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58535629/

相关文章:

使用模型中的值进行 Odoo 搜索 View 过滤器

python - 奥杜 v10 "Field timesheet_ids does not exist"

python-3.x - Odoo 12 - 生成并下载 CSV 文件

odoo - 如何检查odoo中是否安装了模块或模型是否存在

python - 性能监控Openerp

html - 如何在odoo报告中添加一个字段?

python - 如何在没有邮件模板 odoo 9 的情况下发送电子邮件

python-2.7 - 如何更改 SaleOrder 的名称格式?奥杜10

python - 达到虚拟实时时间限制(178/120秒)

sql - 在 Odoo 的 SQL 查询中使用 ID 列表