权限组是为了将人员按组划分同一分配权限。权限组的创建是基于每一个应用来实现的app
创建一条record记录model是ir.module.category,例如在my_task(一个应用)myaddons/my_task/security/permission.xml中编写下面内容:dom
<record id="module_category_my_task" model="ir.module.category"> <field name="name">个人任务</field> <field name="description">个人任务app</field> <field name="sequence">1</field> </record>
<odoo> <data> <record id="module_category_my_task" model="ir.module.category"> <field name="name">个人任务</field> <field name="description">个人任务app</field> <field name="sequence">1</field> </record> <!--建立应用权限分组--> <record id="my_task_manage" model="res.groups"> <field name="name">管理员</field> <!--category_id关联的应用权限分类--> <field name="category_id" ref="module_category_my_task"/> <!--默认加入权限组的用户,base.user_root指系统管理员用户--> <field name="users" eval="[(4, ref('base.user_root'))]"/> </record> <!--员工组--> <record id="my_task_employee" model="res.groups"> <field name="name">员工</field> <!--category_id关联的应用权限分类--> <field name="category_id" ref="module_category_my_task"/> </record> </data> </odoo>
添加权限一般在security下的ir.model.access.csvcode
<!--员工组--> <record id="my_task_employee" model="res.groups"> <field name="name">员工</field> <!--category_id关联的应用权限分类--> <field name="category_id" ref="module_category_my_task"/> <!--继承基础员工组,添加的员工会自动添加到基础员工中去--> <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> </record>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
name 组的描述名称
category_id 指定此组属于哪一个应用程序(模块)
users 指定了组里面的用户,这里表示把admin用户添加到该组
eval 解析(4,ID)
添加主从连接关系到id=ID的对象。(3,ID)
去除和id=ID的对象主从连接关系,可是不删除这个对象(2,ID)
去除和id=ID的对象主从连接关系,而且删除这个对象(调用unlink方法)(5)
去除全部的连接关系,也就是循环全部的从数据且调用(3,ID)(6,0,[IDs])
用IDs里面的记录替换原来连接的记录,即先执行(5)
再循环IDs执行(4,ID)
xml
<?xml version="1.0" encoding="utf-8"?> <odoo> <data noupdate="0"> <!-- Sequences for sale.order --> <record id="wf_sale.sale_order_rule" model="ir.rule"> <field name="name">销售员工访问</field> <!--model_id ref,many2one到模型的id,model_表名--> <field name="model_id" ref="model_wf_sale_sale_order"/> <!--domain_force过滤条件,订单销售人id是当前登陆用户的id,或者没销售的订单--> <field name="domain_force">['|',('sale_people','=',user.id),('sale_people','=',False)]</field> <!--指定是哪一个组--> <field name="groups" eval="[(4,ref('wf_sale.wf_sale_employee'))]"/> </record> <record id="wf_sale.sale_order_manage_rule" model="ir.rule"> <field name="name">销售经理访问</field> <field name="model_id" ref="model_wf_sale_sale_order"/> <field name="domain_force">[(1,'=',1)]</field> <field name="groups" eval="[(4,ref('wf_sale.wf_sale_manage'))]"/> </record> </data> </odoo>
<button string="回退报价单" type='object' class='oe_highlight' name="action_roll_back" groups="wf_sale.wf_sale_manage" attrs = "{'invisible':[('state','=','draft')]}" /> <button string="生成销售单" type="object" class='oe_highlight' name="action_commit_order" groups="wf_sale.wf_sale_manage" attrs = "{'invisible':[('state','=','approved')]}" /> <button string="肯定完成" type="object" class='oe_highlight' name='action_commit_done' groups="wf_sale.wf_sale_manage" attrs = "{'invisible':[('state','=','done')]}" />
经过groups指定权限组id(须要加上模块名)来绑定拥有权限的组,这样只有有权限的人才能看到按钮,而且经过销售的状态来决定是否显示按钮对象