OpenERP 7中通过销售团队设置来实现客户信息的管理权限

核心提示:在实际中一个很简单普通的需求:公司有多个销售部门,比如收销售部门一、销售部门二;销售部门中有经理和销售员,公司有总经理;需求:(1)销售员可以管理自己的客户,并可以查看和自己相关的客户信息;(2)销
在实际中一个很简单普通的需求:
公司有多个销售部门,比如收销售部门一、销售部门二;销售部门中有经理和销售员,公司有总经理;需求:
(1)销售员可以管理自己的客户,并可以查看和自己相关的客户信息;
(2)销售部门经理可以管理自己的客户,可以查看和自己相关的客户信息,同时可以查看本部门销售员的客户信息;
(3)总经理可以管理自己的客户,查看(管理)本公司所有客户信息
原本的思路是通过OpenERP 7中人力资源模块,建立起员工(employee)和系统用户(user)的关联后,利用人力资源模块中部门的功能来完成上述需求。但是,发现在用户对象 中没有指向员工的关联(OpenERP 7中,每个employee可以对多个user),因此以我现在对OpenERP 7的一点点了解来说我还不知道如何通过user得到对应员工的部门信息,因此也不知道怎么写相应的domain规则;当然,研究了一下源码后,发现可以在 user对象中加一个department_id的字段,关联到hr.department中,但是这样的解决思路显然超越我目前的状况。因此还得另找思 路:

经过一番研究,发现可以通过销售团队这个设置来控制客户信息的查看权限控制,因为users里有一个default_section_id字段,可以通过建立销售团队的类似部门组织的层级结构,来实现上述需求。

上述需求解决了,但是现在依然有两个问题:
1、直接使用default_section_id问题
比如查看下级销售团队客户信息domain规则可以写成如下形式
[('user_id.default_section_id','child_of',user.default_section_id)]
这样写,系统会提示说:
Iteration is not allowed on browse_record(crm.case.section, 2)
这说明section的层级关系不能通过child_of来查询?
同样,如果查看相同销售团队客户信息的domain规则可以写成如下形式
[('user_id.default_section_id','=',user.default_section_id)]
也会报错,但是下成如下形式就没有问题:
[('user_id.default_section_id.name','=',user.default_section_id.name)]
这样虽然能解决问题,但是总想不明白为什么要多这么一层呢
2、如果不能用child_of的话,就需要写很多分解的记录规则,来进行下属部门的权限控制,如果child_of的性能不好的话,倒也没什么,只是增加了一些设置的工作。
另为:如果使用child_of的条件时,一定要注意,因为这是递归形式,稍不小心就会导致问题(比如无限递归资源耗尽)。如果user.default_section_id为空的话,使用child_of就悲剧了。

你可能感兴趣的:(OpenERP 7中通过销售团队设置来实现客户信息的管理权限)