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. Javascript 面向对象编程(一):封装(转载)

    Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果 ...

  2. 为 UITextField 增加键盘偏移的模板化写法

    .h代码 #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITextFieldDelega ...

  3. Android的基本常用的短信操作

    1.调用系统发送短信界面(传入手机号码+短信内容) 2.隐藏发送短信(指定号码指定内容)(这里隐藏只是没有反写入数据库) 3.获得收件箱接收到的短信 4.Android屏蔽新短信通知提示信息:(Con ...

  4. Log4net 配置输出文本, 按年月日分文件夹 z

    在项目中新建 “log4net.config” 文件 <?xml version="1.0" encoding="utf-8" ?> <con ...

  5. fedora 系统 能够以 root 用户进行登录

    1. 切换到root工作环境,因为一下操作必须拥有root权限 [haore147@localhost ~]$ su root 密码: 2. 编辑/etc/pam.d/gdm [root@localh ...

  6. js 中时间格式化的几种方法

    1.项目中时间返回值,很过时候为毫秒值,我们需要转换成 能够看懂的时间的格式: 例如: yyyy-MM-dd HH:mm:ss 2.处理方法(处理方法有多种,可以传值到前端处理,也可以后台可以好之后再 ...

  7. 0, \0, NULL

    字符串.字符数组输入.输出与'\0'的问题 原创首发,欢迎转载! 作者按 字符串.字符数组以"%s"格式输入时,以遇到'空格'为这个字符串输入结束. 字符串.字符数组以" ...

  8. Hibernate @Entity注解配置说明

    持久化是位于JDBC之上的一个更高层抽象. 持久层将对象映射到数据库.以便在查询.装载.更新或删除对象的时候,无须使用像JDBC那样繁琐的API.EJB的早期版本号中.持久化是EJB平台的一部分.EJ ...

  9. 基于zabbix 的memached 多实例监控

    基于zabbix 的memached 多实例监控 zabbix agentd 配置文件新增配置: UserParameter=memcached.server.discovery[*],ps uax ...

  10. 使用C#创建及调用WCF完整实例 (Windows服务宿主)

    关于WCF的概念.原理.优缺点等,在这里就不多说了,网上很多,可以自行搜索,比我解释的要专业的多. 这里直接说使用Windows 服务(Windows Service)作为宿主如何实现,其它方式不在此 ...