Odoo 权限控制解析及 eval 详解
2016-05-03 11:14
489 查看
来自:http://www.oejia.net/blog/2016/02/21/odoo_right_ctrl.html
以上截选自 odoo website 模块源码,创建了两个组
name 组的描述名称
category_id 指定此组属于哪个应用程序(模块)
users 指定了组里面的用户,这里表示把admin用户添加到该组
eval 解析
name 菜单名称
groups_id 哪些组可以访问该菜单
以上内容表示A组与B组的成员都可以访问menu1菜单
另一中写法:
base.group_user 是一个通用的系统内置用户组, Odoo系统中所有用户默认属于此组
name 规则名称
model_id 对应的模型
global 是否是全局
domain_force 过滤条件
groups 属于哪个组
以上表示A组的成员就可以获取model_model1的所有数据,可以看出domain_force是控制的关键
对应【设置】->【安全】->【访问控制列表】的数据
示例:
model_id:id 对应的对象模型,
写法示例:
如果内容本身在website模块中则可以省略
后面则为模型的name将”.”替换成”-“的结果,在前面加
group_id:id 哪个组
perm_read、perm_write、perm_create、perm_unlink 增删改查权限。1 有权限 0 无权限
创建权限组
示例<record id="base.group_website_publisher" model="res.groups">
<field name="name">Display Editor Bar on Website</field>
<field name="category_id" ref="base.module_category_website"/>
</record>
<record id="base.group_website_designer" model="res.groups">
<field name="name">Manage Website and qWeb view</field>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
<field name="implied_ids" eval="[(4, ref('base.group_website_publisher'))]"/>
<field name="category_id" ref="base.module_category_website"/>
</record>
以上截选自 odoo website 模块源码,创建了两个组
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 model="ir.ui.menu" id=" memu_id1">
<field name="name" >menu1</field>
<field name="groups_id" eval="[(6,0,[ref('A'),ref('B')]),]"/>
<field name="sequence">1</field>
</record>
name 菜单名称
groups_id 哪些组可以访问该菜单
以上内容表示A组与B组的成员都可以访问menu1菜单
另一中写法:
<menuitem id="menu_id1 " name="menu1" parent="menu_p" sequence="1" groups="A,B "/>
base.group_user 是一个通用的系统内置用户组, Odoo系统中所有用户默认属于此组
记录规则
权限规则可用于更精细化的权限控制,对应【设置】->【安全】->【记录规则】的数据<record model="ir.rule" id="rule1">
<field name="name">rule1</field>
<field name="model_id" ref="model_model1"/>
<field name="global" eval="True"/>
<field name="domain_force">[1,’=’,1]</field>
<field name="groups" eval="[(4,ref('A'))]"/>
</record>
name 规则名称
model_id 对应的模型
global 是否是全局
domain_force 过滤条件
groups 属于哪个组
以上表示A组的成员就可以获取model_model1的所有数据,可以看出domain_force是控制的关键
访问控制列表(组和权限映射表)
另一种表达权限规则的方式是编写 ir.model.access.csv 文件对应【设置】->【安全】->【访问控制列表】的数据
示例:
id | name | model_id:id | group_id:id | perm_read | perm_write | perm_create | perm_unlink |
---|---|---|---|---|---|---|---|
access_xxx | xxxxx | model_website_menu | base.group_website_designer | 1 | 1 | 1 | 1 |
写法示例:
website.model_website_config_settings
如果内容本身在website模块中则可以省略
website.
后面则为模型的name将”.”替换成”-“的结果,在前面加
model_
group_id:id 哪个组
perm_read、perm_write、perm_create、perm_unlink 增删改查权限。1 有权限 0 无权限
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法