资讯专栏INFORMATION COLUMN

Odoo权限管理

mikasa / 2375人阅读

摘要:在中,使用用户组来管理权限,一个特殊的用户组是员工员工组,所有的用户都属于这个组,这个组里包含一些基本的权限。字段级别设置表中的字段的访问权限。

在Odoo中,使用用户组(res.groups)来管理权限,一个特殊的用户组是 员工/员工(base.group_user) 组,所有的用户都属于这个组,这个组里包含一些基本的权限。
四种权限级别(粒度越来越细):
1.菜单/对象级别
设置哪些人可以访问哪些菜单/对象,对象的访问权限包括创建、读、写、删除。
2.记录级别
设置哪些人可以访问哪些记录,也就是设置表的查询条件。
3.字段级别
设置表中的字段的访问权限。
4.工作流级别(很少用到
在工作流的每一步迁移中,设置哪些角色允许触发本迁移

下面示例使用的是account模块中的代码,所以大家有什么问题可以去odoo源码查询。
关于权限的文件一般在security文件夹中,
xxx_security.xml文件定义用户组和用户组对菜单的访问权限
ir.model.access.csv定义用户组对对象的权限矩阵

菜单/对象级别 用户组

首先创建一个组分类(表示很多组属于一个分类):


    module_category_accounting_and_finance
    57

再创建一个用户组:


    
    Billing
    
    
    
    

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


    
    

下面说一下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就是添加该记录)

    Invoicing
    account,static/description/icon.png
    40
    
第二种写法(简洁写法)

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

记录级别的权限控制

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


    
    Account Entry
    
    
    
    
    
    ["|",("company_id","=",False),("company_id","child_of",[user.company_id.id])]
    
    
    
    
    

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

字段级别的权限控制

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


    account.invoice.line.tree
    account.invoice.line
    
        
            
            
            
            
            
            
            
            
        
    

上面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")

权限控制到这里就结束了,如果有什么错误的地方,欢迎大家指出。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41678.html

相关文章

  • Odoo 基础教程系列」第七篇——从 Todo 应用开始(6)

    摘要:今天这个系列教程即将迎来它的最后一篇内容了,我们将要来学习中权限相关的内容。在的权限管理体系中,同样也有用户组这一概念的存在,和其他框架如可以说大同小异。通常和权限相关的内容,我们都会在模块的目录下进行定义,记录集规则的定义自然也不例外。 在今年的情人节(2018.02.14)那天,我写了一篇博客说即将要开一个坑,也就是大家在看的这个系列的教程。今天这个系列教程即将迎来它的最后一篇内容...

    zeyu 评论0 收藏0
  • Odoo 基础教程系列」第〇篇——开天坑啦

    摘要:而模块化则是区别于大多数传统的最强特性,基于这一特性,开发人员可以轻松地继承和扩展任何现有的模块,可以轻松地针对不同的需求进行功能定制。相关文章基础教程系列第一篇环境准备 showImg(https://segmentfault.com/img/remote/1460000013290099?w=1280&h=856); 大家新年好!给大伙拜个早年,今天也是情人节呢,这么好的日子,却一...

    X1nFLY 评论0 收藏0
  • Odoo 基础教程系列」第二篇——从 Todo 应用开始(1)

    摘要:虽然这是个很简单的应用,但是希望大家可以动手一起操作,从最简单的开始上手学习如何使用这个框架。则是在和之间,负责响应用户操作,从中获取数据进行处理并返回到中。 showImg(https://segmentfault.com/img/bV66tE?w=728&h=410); 在第一篇教程发布之后差不多一个月的今天,终于完成了第二篇内容,这个发布周期拖得实在是有点太长了,我都觉得不好意思...

    UCloud 评论0 收藏0
  • Centos7 安装 Odoo11

    摘要:安装安装基于稳定性考虑安装的是,而且默认的官方源中不提供的安装包,所以我们要先换一个提供的源。安装完成之后,创建一个配置文件。 Centos7 安装 Odoo11 1 安装python3.6 Centos7 基于稳定性考虑安装的是python2.7,而且默认的官方 yum 源中不提供 Python 3 的安装包,所以我们要先换一个提供python3的yum源-- IUS 。 1、IU...

    Euphoria 评论0 收藏0
  • Centos7 安装 Odoo11

    摘要:安装安装基于稳定性考虑安装的是,而且默认的官方源中不提供的安装包,所以我们要先换一个提供的源。安装完成之后,创建一个配置文件。 Centos7 安装 Odoo11 1 安装python3.6 Centos7 基于稳定性考虑安装的是python2.7,而且默认的官方 yum 源中不提供 Python 3 的安装包,所以我们要先换一个提供python3的yum源-- IUS 。 1、IU...

    wums 评论0 收藏0

发表评论

0条评论

mikasa

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<