权限管理

权限级别

Odoo的权限的核心是权限组(res_groups)。对每个权限组,可以设置权限组的菜单表示,对象表示,记录规则表示,字段表示。

  • 菜单/对象级别
    设置哪些人可以访问哪些菜单/对象,对象的访问权限包括创建、读、写、删除。
  • 记录级别
    设置哪些人可以访问哪些记录,也就是设置表的查询条件。
  • 字段级别
    设置表中的字段的访问权限。
  • 工作流级别
    在工作流的每一步迁移中,设置哪些角色允许触发本迁移
菜单/对象级别

模块下security目录有两个文件:xxx_security.xml、ir.model.access.csv
其中 :
xxx_security.xml 文件定义组和组对菜单的访问权限
ir.model.access.csv 定义组对对象的权限矩阵

xxx_security.xml 文件:

在这里插入图片描述

model="ir.module.category"
model="res.groups"
//都是固定的写法
  • Noupdate 表示:当模块升级时是否更新本条数据。 对于demo
    数据,通常设置成noupdate=”1”,即不更新,不指noupdate 的话,默认值是noupdate=”0”。
  • category_id表示:
    group_test_user和group_test_manager属于 module_category_test分组,并且只能选择其中一个。
  • implied_ids 基于哪个用户组,这个层级关系 <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>是最基础的用户名,最初是基于这个,后面一层一层递增。而当你的权限分组,没有一层层的递进时,会呈现出可以选择对个权限对象即复选框,当一层层递进时,只能选择一种对象。
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

id
权限id,默认规则是access_模块名_类名,还没发现有什么用
name
权限名,默认规则是模块名.类名,还没发现有什么用
model_id:id
这个是固定写法,规则是model_模块名_表名,其它地方引用权限会用这个id
如果内容本身在website模块中则可以省略模块名,还有当出错时,不带模块名。
group_id:id
组id,这里的base.group_user是系统内置组,即员工.员工组,创建帐户时,默认属于这个组。所以给这个组赋权限,相当于给新帐户的默认权限。
perm_read,perm_write,perm_create,perm_unlink
对应读、写、增加、删除权限,1是有权限,0是无权限,具体根据需要来设置权限

记录规则

权限规则可用于更精细化的权限控制,对应【设置】->【安全】->【记录规则】的数据

<record model="ir.rule" id="rule1"> // model ='ir.rule'表示的是记录规则是固定的,而id是可以自己随意设置的
<field name="name">rule1</field>
<field name="model_id" ref="model_model1"/>
<field name="global" eval="True"/>
<field name="category_id" ref="B"/>
<field name="user" eval="[(4,ref('base.user_root'))]" //把admin加入群组中
<field name="domain_force">[1,=,1]</field>
<field name="groups" eval="[(4,ref('A'))]"/>
</record>

name 规则名称
model_id 对应的模型,表名称
global 是否是全局
domain_force 过滤条件
groups 属于哪个组,对那个组用户生效,如果没有这一行表示这个rule对所有的组生效。
以上表示A组的成员就可以获取model_model1的所有数据,可以看出domain_force是控制的关键
comment:用户组的注释
category_id:属于哪个应用程序,或者哪个模块,为了方便管理
user:组里面的用户

只看与用户自己相关的内容
<data noupdate="0">
         <record model="ir.rule" id="prison_ir_rule">
                <field name="name">All Payment Notice</field>
                <field name="model_id" ref="model_prison_warn"/>
                <field name="domain_force">['|',('deal_person','=',user.id),('deal_person','=',False)]</field>
                <field name="groups" eval="[(4, ref('prison_system.group_prisoner'))]"/>
                <field name="perm_read" eval="1" />
                <field name="perm_write" eval="0" />
                <field name="perm_create" eval="0" />
                <field name="perm_unlink" eval="0" />
            </record>
    </data>

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值