中菁- odoo  ERP 实施 杭州

示例图片三
首页 > Odoo资讯 > odoo知识库

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

2017-02-24 08:56:09 中菁- odoo ERP 实施 杭州 阅读

在实际中一个很简单普通的需求:

公司有多个销售部门,比如收销售部门一、销售部门二;销售部门中有经理和销售员,公司有总经理;需求: (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就悲剧了。


Powered by MetInfo 5.3.15 ©2008-2018 www.metinfo.cn