权限一张图

权限详解文字版

(部分转载并补充)

在Odoo中,使用用户组(res.groups)来管理权限,一个特殊的用户组是 员工/员工(base.group_user) 组,所有的用户都属于这个组,这个组里包含一些基本的权限。
四种权限级别(粒度越来越细):
1.菜单/对象级别
设置哪些人可以访问哪些菜单/对象,对象的访问权限包括创建、读、写、删除。
2.记录级别
设置哪些人可以访问哪些记录,也就是设置表的查询条件。
3.字段级别
设置表中的字段的访问权限。
4.工作流级别(很少用到)
在工作流的每一步迁移中,设置哪些角色允许触发本迁移
下面示例使用的是account模块中的代码,所以大家有什么问题可以去odoo源码查询。
关于权限的文件一般在security文件夹中,
xxx_security.xml文件定义用户组和用户组对菜单的访问权限
ir.model.access.csv定义用户组对对象的权限矩阵
菜单/对象级别
用户组
首先创建一个组分类(表示很多组属于一个分类):

<record id="base.module_category_accounting_and_finance" model="ir.module.category"><field name="name">module_category_accounting_and_finance</field><field name="sequence">57</field>
</record>

再创建一个用户组:

<record id="group_account_invoice" model="res.groups"><!-- 组的名字,如:员工 --><field name="name">Billing</field><!-- 此组属于的组分类 --><field name="category_id" ref="base.module_category_accounting_and_finance"/><!-- 继承的组,也就是说这个组也拥有这些继承组的权限 --><field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>

修改这个组的一些内容,如:给这组加上一个用户:

<record id="group_account_invoice" model="res.groups"><!-- 给这个组添加admin用户 --><field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>

下面说一下eval语法:
(0, 0, {values}) 根据values的值新建一条记录
(1, ID, {values}) 更新id=ID的记录,(写入values的值)
(2, ID) 删除id=ID这条记录,(调用unlink方法,删除数据及整个主从数据链接关系)
(3, ID) 切断主从数据的链接关系但是不删除这个记录
(4, ID) 为id=ID的数据添加主从链接关系
(5) 删除所有的从数据的链接关系,也就是向所有的从数据调用(3, ID)
(6, 0, [IDs]}) 用IDs中的记录替换原来的记录(相当于先执行(5)在循环执行(4, ID))
用户组对model的权限控制(也就是对象的访问权限)
模块下 security 目录下的文件:ir.model.access.csv
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_product_product_account_user,product.product.account.user,product.model_product_product,group_account_user,1,0,0,0
access_product_product_account_manager,product.product.account.manager,product.model_product_product,group_account_manager,1,1,1,1
access_product_template_account_manager,product.template.account.manager,product.model_product_template,group_account_manager,1,1,1,1
access_product_price_history_account_manager,prices.history.account.manager,product.model_product_price_history,group_account_manager,1,1,1,1
access_account_payment_term,account.payment.term,model_account_payment_term,account.group_account_`user,1,0,0,0
id:可以随便取,但是在一个模块中是唯一的,一般取名为 access_模型名_特定用户组名(用下划线连起来)
name: 可以随便取,一般命名沿用模型名用“.”连接加 用户组名
model:id: 要做权限控制的model,格式写法是 模块名.model_模块名(中间的‘.’换成‘_’),如果model在此模块中,可以省略模块名,如product.model_product_product
group:id:组的id,不是本模块的组,要在前面加上模块名,如:account.group_account_user
perm_read,perm_write,perm_create,perm_unlink:这些就是具体的权限:读写增删,1 有权限,0 无权限
菜单的权限控制
第一种写法(所有的记录,都可以用这种方法添加及修改,如果id是一样的话就是修改这条记录,如果没有这个id就是添加该记录)

<record id="menu_finance" model="ir.ui.menu"><field name="name">Invoicing</field><field name="web_icon">account,static/description/icon.png</field><field name="sequence">40</field><field name="groups_id" eval="[(6, 0, [ref('account.group_account_user'), ref('account.group_account_manager'), ref('account.group_account_invoice')])]"/>
</record>

第二种写法(简洁写法)

<menuitem name="Invoicing"id="menu_finance"groups="group_account_user,group_account_manager,group_account_invoice"web_icon="account,static/description/icon.png"sequence="40"/>

上面的2个xml表示menu_finance这个菜单只能被group_account_user,group_account_manager,group_account_invoice 三个用户组访问
如果有上级菜单,加parent属性,如果上级菜单不在本模块中,需要加模块名如:account.menu_finance:

<menuitem id="menu_finance_reports" name="Reports" parent="menu_finance" sequence="5" groups="group_account_invoice"/>

记录级别的权限控制
记录的权限放在"ir.rule"model中,所有我们添加或修改ir_rule表中的记录,就可以控制记录的权限

<record id="account_move_comp_rule" model="ir.rule"><!-- 规则名称 --><field name="name">Account Entry</field><!-- 对应模型 --><field name="model_id" ref="model_account_move"/><!-- 是否全局 --><field name="global" eval="True"/><!-- 过滤条件 其中user表示当前登录用户对象 --><field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field><!-- 读写增删权限(针对过滤后的记录) --><field name="perm_read" eval="True"/><field name="perm_write" eval="False"/><field name="perm_create" eval="False"/><field name="perm_unlink" eval="False"/>
</record>

domain_force(也就是domain表达式的写法)写法请看我的另一篇博客domain的写法及运用。

   <field name="global" eval="True"/>只能填写True

不是全局的要写成下图

字段级别的权限控制
给字段上添加用户组,表示只有这些组的用户在这个视图中才能访问和操作这个字段,如:

<record id="view_invoice_line_tree" model="ir.ui.view"><field name="name">account.invoice.line.tree</field><field name="model">account.invoice.line</field><field name="arch" type="xml"><tree string="Invoice Line"><field name="name"/><field name="account_id" groups="account.group_account_user"/><field name="quantity"/><field name="uom_id" groups="product.group_uom,account.group_account_user"/><field name="price_unit"/><field name="discount" groups="base.group_no_one"/><field name="price_subtotal"/><field name="currency_id" invisible="1"/></tree></field>
</record>

上面xml表示在这个tree视图(这里注意,这个权限只针对这个tree视图)上,account_id,uom_id,discount这3个字段只有对应的用户组中的用户才能看到。
如果你想在这个model的所有视图中都有这个权限控制的话,要在这个字段定义的时候,就要指定groups,多个用户组用","分隔,如:
gengo_private_key = fields.Text(string=“Gengo Private Key”, copy=False, groups=“base.group_system,base.group_user”)

Odoo权限详解一张图相关推荐

  1. ForkJoin框架详解 一张图搞明白工作窃取(work-stealing)机制

    1 ForkJoin框架 1.1 ForkJoin框架 ForkJoinPool一种ExecutorService的实现,运行ForkJoinTask任务.ForkJoinPool区别于其它Execu ...

  2. linux根-文件系统-目录管理-文件管理-用户及权限详解-用户组-用户管理-权限管理...

    一 .Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上. 目录提供了管理文件的一个方便而有效的途径. Linux使用标准的目录结构,在安装的时候,安装 ...

  3. php注解rbac,PHP的RBAC权限详解

    本文主要和大家分享PHP的RBAC权限详解,希望能帮助到大家,首先我们应该先知道权限管理要有哪些功能: (1).用户只能访问,指定的控制器,指定的方法 (2).用户可以存在于多个用户组里 (3).用户 ...

  4. 19. linux中权限详解,Linux权限位,读写执行权限真正含义,chmod详解

    linux中权限详解,Linux权限位,读写执行权限真正含义,chmod详解 文章目录 Linux权限位 读写执行 三种权限真正含义和作用 权限对文件的作用 权限对目录的作用 示例 chmod 使用数 ...

  5. linux e权限,Linux 文件权限详解

    查看文件详细信息 参数说明 权限说明 文件类型说明 d    目录 -     普通文件 l     连接文件 b    存储设备,例如硬盘,U盘 c    串行接口设备,例如键盘.鼠标 设置文件权限 ...

  6. iOS教程:详解iOS多图下载的缓存机制

    ios教程,ios的干货一直来不及给大家分享,小编也是一直在忙啊!今天给大家献上ios:详解iOS多图下载的缓存机制 1. 需求点是什么? 这里所说的多图下载,就是要在tableview的每一个cel ...

  7. python画50个图-Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?

    Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢? 可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的.对于初学者来说,很容易被这官网上 ...

  8. 飞越650四轴无人机安装全程详解(多图)

    飞越650四轴无人机安装全程详解(多图) 本文根据自己的安装实际过程,总结了开箱后一个比较合理的650四轴无人机安装顺序,以及各个步骤的注意事项,主要内容包括: 系统基本配置 机架安装 安装机臂与机架 ...

  9. odoo domain详解

    odoo domain详解 参考的以下文档: luohuayong:Odoo domain写法及运用 baimo:odoo domain表达式 1.domain 表达式规则 最简单的格式:[('字段名 ...

最新文章

  1. export linux命令_linux 初级3 环境变量命令env、set、export、declare的区别
  2. python opencv ImportError: libGL.so.1: cannot open shared object file: No such file or directory
  3. java nfa dfa_DFA与NFA
  4. 耗费360万美元开发“无坚不摧”的电脑,美国这回下血本了!
  5. linux下expdp定时备份_Linux下定时任务的配置
  6. 00Cascading Style Sheet
  7. MAXIMO部分AppBean类操作经验
  8. 面试难题:本机号码一键登录原理,你知道吗?
  9. grads 相关系数_气象统计方法实习报告材料
  10. 从零开始的unity2017笔记【2D】(【二】角色动画)
  11. 伏神月破、伏神跟飞神、动爻、日月关系的思考
  12. sqlserver 查询记录数 查系统表秒出
  13. 商业智能bi时代:商务智能常见应用实例
  14. es bulk java_ES 操作之批量写-BulkProcessor 原理浅析
  15. 关于 scrollIntoView() 锚点 元素滚动到指定位置 平滑
  16. (附源码)ssm经济信息门户网站 毕业设计 141634
  17. 良匠-手把手教你写NFT抢购软(四)
  18. IT人职业规划【转】
  19. 关于稠密性和连续性的通俗理解
  20. rapidjson!完美的C++解析json库

热门文章

  1. kube-apiserver启动时报错并且不能操作etcd
  2. c++ MFC 画笔画一个圆形
  3. python笔试题110题_吐血整理:110道python面试题(带答案)
  4. 2020中国移动OneNET之星物联网创客马拉松大赛
  5. ArcGIS制作全球地图并生成纬度统计分布线
  6. 视觉设计中发现的11种光学错觉
  7. python如何问问题_学会正确的提问
  8. draw.io编辑工具
  9. python用stomp扩展连接activemq(千千万万要注意,默认端口是61613,不是62613)
  10. python学习实验报告(第一周)