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的编写方式在以后我们会另文介绍,敬请期待。

记录规则 – 销售只能看到自己的客户,经理可以看到全部的更多相关文章

  1. openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)

    记录规则 – 销售只能看到自己的客户,经理可以看到全部 原文地址:http://cn.openerp.cn/record_rule/ OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定 ...

  2. Java 日志记录规则

    Java 日志记录规则 规则一:日志是面向读者的 我们不应该让无价值的信息使日志文件变得乱糟糟,比如说完整打印所有的实体字段. 通常,实体名字和其逻辑关键字足以识别在表格中的一条记录了. 规则二:匹配 ...

  3. 记录规则(recording rules)与告警规则(alerting rule)

    记录规则(recording rules) 配置规则 Prometheus支持两种类型的规则,可以对其进行配置,然后定期进行评估:记录规则和警报规则.要在Prometheus中包含规则,请创建一个包含 ...

  4. CRM客户关系管理系统(一)

    第一章.CRM介绍和开发流程 1.1.CRM简介 客户关系管理(CRM) 客户关系管理(customer relationship management)的定义是:企业为提高核心竞争力,利用相应的信息 ...

  5. CRM 客户关系管理系统

    CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...

  6. 推荐一本写给IT项目经理的好书

    原文地址:http://www.cnblogs.com/cbook/archive/2011/01/19/1939060.html (防止原文作者删除.只能拷贝一份了) 推荐一本写给IT项目经理的好书 ...

  7. crm

    CRM 开发 需求分析 存储所有的客户咨询信息 避免重复数据 客户的多次跟踪记录 客户来源.成单率分析 每个销售只能修改自己的客户信息 报名流程开发 班级管理 学员成绩,出勤管理 问卷调查 校区管理 ...

  8. 教育行业CRM项目开发

    项目开发流程 需求分析 存储所有的客户咨询信息    避免重复数据    客户多次跟踪记录    客户来源分析.成单率分析    每个销售只能修改自己的客户信息    报名流程开发        班级 ...

  9. SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现

    一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller        //控制类 service //服务接口 service.impl //服务 ...

随机推荐

  1. ZOJ 2112 Dynamic Rankings (动态第k大,树状数组套主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  2. .Net C#向远程服务器Api上传文件

    Api服务代码一: /// <summary> /// 服务器接收接口 /// </summary> [HttpPost] [Route("ReceiveFile&q ...

  3. xamarin其实也是一个鸡肋

    刚刚体验了一把VS 2015,后来因为部分sdk和工具下载太慢,还是最终决定卸载.顺道了解了下xamarin studio.个人感觉Xamarin完全也是一个鸡肋,没必要过多的时间在xamarin上面 ...

  4. JS浮点数运算

    //乘法函数,用来得到精确的乘法结果 //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显.这个函数返回较为精确的乘法结果. //调用:accMul(arg1,arg2) ...

  5. Ext.state.Manager.setProvider(new Ext.state.CookieProvider())

    Ext.state.Manager.setProvider(new Ext.state.CookieProvider()) 初始化Ext状态管理器,在Cookie中记录用户的操作状态,如果不启用,象刷 ...

  6. 音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

    音频视频编程相关:GStreamer/ffmpeg/directshow/vfw linux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向. 一.GStreamer ...

  7. python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  8. icanhazip.com 使你在不论什么地方知道你的公网IP地址

    icanhazip.com 使你在不论什么地方知道你的公网IP地址 icanhazip.com是一个网址,你在浏览器中输入这个网址,你就能得到你的公网IP地址了. 我在Linux下一般使用curl i ...

  9. Java 复制大文件方式(nio2 FileChannel 拷贝文件能力测试)

    目前为止,我们已经学习了很多 Java 拷贝文件的方式,除了 FileChannel 提供的方法外,还包括使用 Files.copy() 或使用字节数组的缓冲/非缓冲流.那个才是最好的选择呢?这个问题 ...

  10. Mantis的config_inc.php的各配置项的作用及其修改

    Mantis的设置是这样保存的:在 config_defaults_inc.php中保存Mantis的默认设置,用户自己的设置信息保存在config_inc.php中.如果某个选项在config_in ...