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. HDU 3436 Queue-jumpers (splay tree)

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. Knockout官网实例在MVC下的实现-02,实现计次

    本篇使用Knockout在MVC下实现"Hello World",对应的官网实例在这里. 当次数达到3: View视图 页面包含三个部分:1.显示点击按钮的次数2.button按钮 ...

  3. dwz navtab 限制打开数量实例

    本文章给大家介绍一个dwz navtab 限制打开数量实例,希望此教程对各位同学会有所帮助 openTab: function(tabid, url, options){ //if found tab ...

  4. 《深入理解C#(第3版)》

    <深入理解C#(第3版)> 基本信息 原书名:C# in depth 作者: (英)Jon Skeet 译者: 姚琪琳 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:978 ...

  5. 深入分析JavaWeb Item7 -- HttpServletResponse详解

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

  6. 【BZOJ】【1941】【SDOI2010】Hide and Seek

    KD-Tree 一开始看错题了

  7. 在Java Web程序中使用Hibernate

    在Java Web程序中使用Hibernate与普通Java程序一样.本文中将使用Servlet和JSP结合Hibernate实现数据库表的增删改查操作. Web程序中,hibernate.cfg.x ...

  8. [11] 楔形体(Wedge)图形的生成算法

    顶点数据的生成 bool YfBuildWedgeVertices ( Yreal width, Yreal length, Yreal height, YeOriginPose originPose ...

  9. Informatica 常用组件Filter之二 过滤条件

    过滤条件可以使用转换语言输入.过滤条件是返回 TRUE 或 FALSE 的表达式.例如,如果您要过滤出员工薪水低于 $30,000 的行,可输入以下条件: SALARY > 30000 可以使用 ...

  10. SCSI contrller的几种类型的区别

    在VMware vSphere Web Client中, 可以为虚拟机添加一个新的SCSI controller, 选项中包含如下的类型, 那么他们有什么区别呢? 如何选择呢?   BusLogic ...