设置联系人查看权限后,无法进入员工模块查看员工信息。
-
在此之前想请教一下:记录权限中用到的
字段名称
该如何填写?
在技术/模型
能看到模型的字段名称,记录权限中用到的字段名称
结构是不是模型名称.字段名称
我想实现的访问权限是:
权限组 模块 记录权限 从“用户类型/内部用户”继承 员工 系统默认权限:只能查看公司内部员工基本信息 用户类型/内部用户 联系人 仅能查看 公司内部人员
的联系人信息销售/用户:仅自己单据 联系人 仅能查看 公司内部人员
和负责客户
的联系人信息销售/用户:业务经理 联系人 仅能查看 公司内部人员
、负责客户
、下属业务员负责客户
的联系人信息销售/用户:全部单据 联系人 可以查看所有业务信息 业务部门有多个业务小组,
业务经理
是小组负责人,不同小组之间不能互相查看业务数据,除非设置为关注人
。按照 @digitalsatori 和 @犟爆骨头 两位的建议设置联系人权限后,联系人权限生效后无法进入“员工”模块以及查看员工信息。
界面提示:访问错误 由于安全限制,您不得访问"联系人"(res.partner) 记录. 记录: Administrator (id=3) User: 联系人权限测试用户 (id=9) 此限制是由于以下规则: - res.partner.rule.private.group - res.partner.rule.private.salesperson 如有必要,请联系您的管理员以请求访问.
res.partner.rule.private.employee
设置为销售/用户:所有单据
的情况下,联系人筛选生效,但是无销售权限的内部用户
无法访问联系人。
res.partner.rule.private.employee
设置为用户类型/内部用户
的情况下,联系人筛选不生效;取消“读取”权限
的情况下联系人筛选生效,但是无销售权限的内部用户
无法访问联系人。以下是当前
模型/联系人/记录规则
的设置模型/联系人/记录规则 名称 群组 域 读 写 增 删 res.partner company ['|', '|', ('partner_share', '=', False), ('company_id', 'in', company_ids), ('company_id', '=', False)]
[x] [x] [x] [x] res.partner.rule.private.employee 用户类型/公共
用户类型\网站入口
[('id', 'child_of', user.commercial_partner_id.id)]
[x] [ ] [ ] [ ] res.partner.rule.private.employee 用户类型/内部用户
['|', ('type', '!=', 'private'), ('type', '=', False)]
[ ] [x] [x] [x] res.partner.rule.private.group 技术/访问私人地址
[('type', '=', 'private')]
[x] [x] [x] [x] res.partner.rule.private.salesperson 销售/用户:仅自己的单据
['|', ('create_uid', '=', user.id), ('user_ids', 'in', user.id)]
[x] [x] [x] [x] res.partner.rule.private.manager 销售/用户:业务经理
[('user_id.employee_id.parent_id.user_id', '=', user.id)]
[x] [x] [x] [x] -
参考:odoo 权限问题
以及
Odoo应用手册(上)09.05.04记录规则的设置
记录规则 – 销售只能看到自己的客户,经理可以看到全部确认:是因为“联系人”模块中
用户类型/内部用户
的基础权限限制,导致继承权限无效修改“联系人”相应记录权限后,一切恢复正常,并实现联系人多级查看权限。
以下是当前可正常实现联系人隔离的
模型/联系人/记录规则
设置模型/联系人/记录规则 名称 群组 域 读 写 增 删 res.partner company ['|', '|', ('partner_share', '=', False), ('company_id', 'in', company_ids), ('company_id', '=', False)]
[x] [x] [x] [x] res_partner: portal/public: read access on my commercial partner 用户类型/公共
用户类型\网站入口
[('id', 'child_of', user.commercial_partner_id.id)]
[x] [ ] [ ] [ ] res.partner.rule.private.employee 用户类型/内部用户
['&','|','|','|',('id','=',user.partner_id.id),('user_id','=',user.id),('parent_id.user_id','=',user.id),('user_id','=',False),'|',('type','!=','private'),('type','=',False)]
[x] [x] [x] [x] res.partner.rule.private.group 技术/访问私人地址
[('type', '=', 'private')]
[x] [x] [x] [x] res.partner.rule.private.salesperson 销售/用户:仅自己的单据
['|', '|', '|', ('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)]
[x] [x] [x] [x] res.partner.rule.private.manager 销售/用户:业务经理
[('user_id.employee_id.parent_id.user_id', '=', user.id)]
[x] [x] [x] [x] res.partner.rule.private.admin 系统管理/设置
[(1,'=',1)]
[x] [x] [x] [x] res.partner.rule.private.salesadmin 销售/管理员
[('customer_rank','>',0)]
[x] [x] [x] [x] -
上面的权限还有一点BUG,修正如下
名称 群组 域 读 写 增 删 res.partner.rule.private.employee 用户类型/内部用户
['|', '|', '|', ('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),'|',('type','!=','private'),('type','=',False)]
[x] [x] [x] [x] 在
“员工”
模块内设置所属经理
后,经理能查看下级业务员负责联系人。
联系人内以公司/销售员
可见权限覆盖公司/联系人/销售员
可见权限。 -
业务经理的联系人权限还有一点BUG:
业务经理看不到自己下属业务人员为销售员的公司下,销售员为空的联系人。修正如下
名称 群组 域 读 写 增 删 res.partner.rule.private.manager 销售/用户:业务经理
['|',('user_id.employee_id.parent_id.user_id', '=', user.id),'&',('user_id','=', False),('parent_id.user_id.employee_id.parent_id.user_id', '=', user.id)]
[x] [x] [x] [x] 实现:
当前用户为业务经理
的情况下,能看到销售员
为空,但是联系人所属公司的销售员为自己下属业务人员的联系人。 -
@Etren 问题写得非常仔细用心,排版也是本论坛第一名。非常想帮你解决问题,无奈看到我大脑爆炸:exploding_head: 。
我只能回答你里面的一个小问题:
@Etren 在 设置联系人查看权限后,无法进入员工模块查看员工信息。 中说:
在技术/模型能看到模型的字段名称,记录权限中用到的字段名称结构是不是模型名称.字段名称
不是的。就是字段名。如果你引用的是关系字段的关联对象中的字段,可以应用
关系字段.关联对象字段名
。 比如,我们要按客户名称来过滤销售订单,我们可以用[('partner_id.name', 'like', 'xxxx')]
形式,partner_id.name
表示订单上的客户名称