我正在尝试在 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
按模块分组
- 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_salesman
是 group_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/