odoo 权限问题
Posted kingfan1993
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了odoo 权限问题相关的知识,希望对你有一定的参考价值。
odoo 权限问题
权限组问题
权限组是为了将人员按组划分同一分配权限。权限组的建立是基于每个应用来实现的
- 建立一个应用的分组(可省略,主要用于创建用户时有选择项)
建立一条record记录model是ir.module.category,例如在my_task(一个应用)myaddons/my_task/security/permission.xml中编写下面内容:
<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>
- 创建2个分组.
<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.csv
- 继承权限
<!--员工组-->
<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)
记录权限(record_rule)
<?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>
参数介绍
- name:记录规则名称,可随意定义
- model_id:添加记录规则得model,写法:模块名.model_表名(表名有.需要换成_),内部使用可以加模块名
- domain_force:记录过滤条件
- groups:绑定权限生效的组
按钮权限
<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(需要加上模块名)来绑定拥有权限的组,这样只有有权限的人才能看到按钮,并且通过销售的状态来决定是否显示按钮
以上是关于odoo 权限问题的主要内容,如果未能解决你的问题,请参考以下文章