设置联系人查看权限后,无法进入员工模块查看员工信息。
-
在此之前想请教一下:记录权限中用到的
字段名称该如何填写?
在技术/模型能看到模型的字段名称,记录权限中用到的字段名称结构是不是模型名称.字段名称我想实现的访问权限是:
权限组 模块 记录权限 从“用户类型/内部用户”继承 员工 系统默认权限:只能查看公司内部员工基本信息 用户类型/内部用户 联系人 仅能查看 公司内部人员的联系人信息销售/用户:仅自己单据 联系人 仅能查看 公司内部人员和负责客户的联系人信息销售/用户:业务经理 联系人 仅能查看 公司内部人员、负责客户、下属业务员负责客户的联系人信息销售/用户:全部单据 联系人 可以查看所有业务信息 业务部门有多个业务小组,
业务经理是小组负责人,不同小组之间不能互相查看业务数据,除非设置为关注人。按照 @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表示订单上的客户名称