记录规则 – 销售只能看到自己的客户,经理可以看到全部
OpenERP中的权限管理有四个层次:
- 菜单级别: 即,不属于指定菜单所包含组的用户看不到该菜单。不安全,只是隐藏菜单,若用户知道菜单ID,仍然可以通过指定URL访问
- 对象级别: 即,对某个对象是否有‘创建,读取,修改,删除“的权限。OE中的对象可以简单理解为表对象,比如“客户”,“产品”,“销售订单”等都是对象
- 记录级别: 即,对对象表中的数据的访问权限。比如同样访问“客户”对象,业务员只能对自己创建的客户有访问的权限,而经理可以访问其所辖的业务员的所有“客户”对象,这里的访问也可以进一步明细到“创建,读取,修改,删除”的权限
- 字段级别: 即,一个对象或表上的某些字段的访问权限。比如产品的成本字段只有经理有读权限,比如订单上的单价字段只有经理才有修改的权限等。
在实际的培训和实施过程中,我们发现客户往往会提出很多记录级别的访问规则要求。最经典的就是:“我希望销售员只能看到他自己创建的客户,而其经理则可以看到所有业务员创建的客户信息”, 本文就是以这个需求为蓝本来介绍如何使用OpenERP的“记录规则”来定制记录级别的访问控制。
测试环境创建:
- 创建三个用户,分别是manager, sale1, sale2。 manager的“销售”应用的访问权限为:查看所有线索; 而sale1和sale2两个业务员的访问权限为:查看自己的线索, 这两个不同的权限实际上对应两个不同的组:See Own Leads (group_sale_salesman), 和 See All Leads (group_sale_salesman_all_leads)

- 创建两个公司,分别为Company ABC 和Company XYZ, 每个公司下分别有两个联系人ABC Contact 1, ABC Contact 2, XYZ Contact 1, XYZ Contact 2


- 注意在创建的公司或联系人表单的“销售与采购”页签中有销售员选项,我们就是用这个字段(user_id)来过滤记录,该字段的默认值为空。若希望改变该字段默认值为创建用户的ID,只需改变一行代码即可实现,以后再做介绍。
记录规则设置:
我们在做好了以上基本设置以后,可以尝试用前面定义的三个不同用户分别登录系统,并且为客户设置不同的销售员,在目前情况下,三个用户看到的客户记录完全一样,这是因为我们还没有为客户对象设置需要的记录规则
创建记录规则,需要有“技术特性”(Technical Features)权限,在做以下操作前先给予Administrator 用户该权限。并刷新页面。
点击设置->技术->安全设定->记录规则 菜单项,对于本文之要求我们实际只需创建两条记录规则分别适用‘See Own Leads”组和”See All Leads”组,这样销售和业务员登录后就可以按要求看到不同的客户信息了。
以下是设置好的结果,大家可以利用之前测试环境来验证以下的设置。我们在后面对这个设置做一些解释:
See Own Leads组的记录规则

Sell All Leads 组的记录规则

我们首先来看适用于“查看自己线索”(See Own Leads)组的记录规则中的Domain设置:
['|', '|', '|', ('user_id','=',user.id), '&', ('user_id','=', False),('parent_id.user_id', '=', user.id), '&', ('user_id', '=', False), ('parent_id.user_id', '=', False), '&', ('user_id', '=', False), ('parent_id', '=', False)]
Domain实际上就是一个或多个过滤条件的组合,对于上例,实际上四条过滤条件的并集(求或),即:
user_id == user.id ?
这种情况最容易理解,左边的user_id是客户(合作伙伴)对象上的“销售员”字段的内部名称,右边的user表示当前登录用户。整个记录表示,客户的销售员的id如果与登录用户的id相同即满足条件。这个条件的满足,表示业务员能看到属于自己的客户(即客户上的销售员指定为自己的客户)
或者
user_id == False 并且 parent_id.user_id == user.id ?
此条规则以及下面两条规则,都是考虑了因为有客户可以有“公司”和下属“联系人”两层关系的情况。此条规则表示:当前的客户的销售员未定义(False),但是其父亲parent_id(即该联系人所属公司)上的销售员与当前登录用户相符时成立。
或者
user_id == False 并且 parent_id.user_id == False ?
当当前访问的联系人及其所属公司都没有设置销售员信息时,当前用户可访问该记录
或者
user_id == False 并且 parent_id == False?
当当前访问的公司(parent_id == False),没有设置销售员时,当前用户可访问该记录
对于“访问所有线索”组,我们只有一条简单的记录:
[(1, '=', 1)]
这是因为,“访问所有线索”组继承自“访问自己线索”组,默认适用于“访问自己线索”组的记录规则也适用于“访问所有线索”组,以上的记录规则永远为真,从而绕过了”访问自己线索“组的过滤条件。

好了,我们已经了解如何通过记录规则来实现“业务员能看到自己的客户,而经理可以看到全部客户”这样的简单要求。事实上,我们还可以利用记录规则中对于“创建”,“读取”, “修改”,“删除”权限的控制来实现,例如“销售员可以编辑修改自己客户,但对不属于自己的客户仅有查看权限,经理可以查看,编辑,删除所有的客户“这样的类似的稍微变化的需求。自己动手试试看。对于Domain的编写方式在以后我们会另文介绍,敬请期待。
记录规则 – 销售只能看到自己的客户,经理可以看到全部的更多相关文章
- openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)
记录规则 – 销售只能看到自己的客户,经理可以看到全部 原文地址:http://cn.openerp.cn/record_rule/ OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定 ...
- Java 日志记录规则
Java 日志记录规则 规则一:日志是面向读者的 我们不应该让无价值的信息使日志文件变得乱糟糟,比如说完整打印所有的实体字段. 通常,实体名字和其逻辑关键字足以识别在表格中的一条记录了. 规则二:匹配 ...
- 记录规则(recording rules)与告警规则(alerting rule)
记录规则(recording rules) 配置规则 Prometheus支持两种类型的规则,可以对其进行配置,然后定期进行评估:记录规则和警报规则.要在Prometheus中包含规则,请创建一个包含 ...
- CRM客户关系管理系统(一)
第一章.CRM介绍和开发流程 1.1.CRM简介 客户关系管理(CRM) 客户关系管理(customer relationship management)的定义是:企业为提高核心竞争力,利用相应的信息 ...
- CRM 客户关系管理系统
CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...
- 推荐一本写给IT项目经理的好书
原文地址:http://www.cnblogs.com/cbook/archive/2011/01/19/1939060.html (防止原文作者删除.只能拷贝一份了) 推荐一本写给IT项目经理的好书 ...
- crm
CRM 开发 需求分析 存储所有的客户咨询信息 避免重复数据 客户的多次跟踪记录 客户来源.成单率分析 每个销售只能修改自己的客户信息 报名流程开发 班级管理 学员成绩,出勤管理 问卷调查 校区管理 ...
- 教育行业CRM项目开发
项目开发流程 需求分析 存储所有的客户咨询信息 避免重复数据 客户多次跟踪记录 客户来源分析.成单率分析 每个销售只能修改自己的客户信息 报名流程开发 班级 ...
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ...
随机推荐
- 分频器VHDL描述
在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号.我们知道,在硬件电路设计中时钟信号时非常重要的. 下面我们介绍分频器的VHDL描述,在源代码中完成对时钟信号CLK的2分 ...
- Spartan-6 - How to connect *CMP* pins?
http://www.xilinx.com/support/answers/35171.htm How to connect the following pins in my design? CMPM ...
- Red Hat Enterprise Linux 7.4配置VSFTP服务器
vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性.传输速度,以及支 ...
- 埃及分解:将2/n分解成为1/x+1/y的格式
算法 古埃及以前创造出灿烂的人类文明,他们的分数表示却非常令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式. 这里,a 和 b 必须是不同的两个整数,分子必须为 1 比方,2/1 ...
- 达芬奇TI DVSDK之视频数据流过程分析
作者:openwince@gmail.com 博客:http://www.cnblogs.com/tinz 本文的copyright归openwince@gmail.com所有,使用GPL发布, ...
- 2013-8-6 10:56:07 JAVA_WEB:员工号自动生成源代码
create table user_info_temp ( usId varchar2(20), usNo varchar2(20), usName varchar ...
- android软件中加入广告实现方法
经过了一番折腾,忙忙碌碌了一下午,终于搞明白了Android软件界面嵌入广告的方法,以下我以嵌入有米广告为例小结一下: 步骤一,下载有米广告SDK,将 youmi-android.jar 导入想要嵌入 ...
- 3. python 字符串的一般使用
3. python 字符串的一般使用 1.基本操作 1)使用+连接 >>> "abc"+"efg" 'abcefg' >&g ...
- NDK开发环境搭建_r8
本文主内容: 1. Android NDK 安装 2. 安装Cygwin与使用NDK编译 3. 在Eclipse中集成C/C++开发环境CDT 4. 安装Sequoyah插件 5. JNI编 ...
- 什么是软件project?
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNo ...