高度封装的前后端框架-odoo回顾(七): 设置联系人权限

慎重

联系人是odoo中的重要基础概念,是多个功能相关,设置不好容易影像别的功能,所以本次修改本着最小改动原则: 能不改就不改.

实践发现:给与会计管理员会自动赋予访问私有地址的权限

  • 联系人VS联系人:
    • 多对一 父联系人
    • 一对多 子联系人
    • 多对一 商业伙伴
    • 多对一 相同增值税号的联系人
  • 联系人VS用户(用户继承了联系人,你也可以将其看作联系人)
    • 多对一: 销售员(负责联系的内部人员)
    • 一对多:用户

联系人类型:

  • 联系人
  • 结算单地址
  • 送货地址
  • 其他
  • 家庭住址

需求:

销售员自己能看到自己的联系人, 经理能看到所有联系人

现状:

查看addons/base/security/base_security.xml

        <record model="ir.rule" id="res_partner_rule">
            <field name="name">res.partner company</field>
            <field name="model_id" ref="base.model_res_partner"/>
            <!-- We exclude partners that have internal users (`partner_share` field) from
            the multi-company rule because it might interfere with the user's company rule
            and make some users unselectable in relational fields. This means that partners
            of internal users are always visible, not matter the company setting. -->
            <field name="domain_force">['|', '|', ('partner_share', '=', False), ('company_id', 'in', company_ids), ('company_id', '=', False)]</field>
        </record>

以上说明: 全局规则,只授权自己公司下的联系人

        <record model="ir.rule" id="res_partner_portal_public_rule">
            <field name="name">res_partner: portal/public: read access on my commercial partner</field>
            <field name="model_id" ref="base.model_res_partner"/>
            <field name="domain_force">[('id', 'child_of', user.commercial_partner_id.id)]</field>
            <field name="groups" eval="[(4, ref('base.group_portal')), (4, ref('base.group_public'))]"/>
            <field name="perm_create" eval="False"/>
            <field name="perm_unlink" eval="False"/>
            <field name="perm_write" eval="False"/>
        </record>

以上说明: 对于门户用户和公共用户,只看自己商业伙伴

        <!-- Security restriction for private addresses -->
        <record id="res_partner_rule_private_employee" model="ir.rule">
            <field name="name">res.partner.rule.private.employee</field>
            <field name="model_id" ref="base.model_res_partner"/>
            <field name="domain_force">
                ['|', ('type', '!=', 'private'), ('type', '=', False)]
            </field>
            <field name="groups" eval="[
                (4, ref('base.group_user')),
            ]"/>
            <field name="perm_read" eval="True"/>
            <field name="perm_write" eval="True"/>
            <field name="perm_create" eval="True"/>
            <field name="perm_unlink" eval="True"/>
        </record>

以上说明,对于内部用户,能看到所有非家庭住址的联系人.
我们现状和需求不匹配的原因就在这条,后续也要改这条

        <!-- Relex previous rule for group_private_addresses -->
        <record id="res_partner_rule_private_group" model="ir.rule">
            <field name="name">res.partner.rule.private.group</field>
            <field name="model_id" ref="base.model_res_partner"/>
            <field name="domain_force">
                [('type', '=', 'private')]
            </field>
            <field name="groups" eval="[
                (4, ref('base.group_private_addresses'))
            ]"/>
            <field name="perm_read" eval="True"/>
            <field name="perm_write" eval="True"/>
            <field name="perm_create" eval="True"/>
            <field name="perm_unlink" eval="True"/>
        </record>

以上说明: 对于group_private_addresses组的用户,能看到私有联系人.后差,交易管理员,会计管理员等少数管理员拥有该权限

方法

  1. 管理员登陆,点击设置
    在这里插入图片描述2. 基本设置,页面拉到最下面,激活开发者模式
    在这里插入图片描述
  2. 系统动刷新页面后,技术->记录规则
    在这里插入图片描述
  3. 搜索模型是联系人,找到下面这条,点进去,点击复制(我们尽量不改变原记录,在最后会将这条作废存档)

4, 将名称加一个2,将规则定义改成下面表达式,然后保存

['|', '|', ('create_uid', '=', user.id), ('user_ids', 'in', user.id), ('type', 'in', ('invoice', 'delivery', 'other'))]

上文释义:
用或的关系来连接下面三个条件
规则一:在内部用户权限下,只有创建者能看到自己的联系人
规则二:如果有关联用户有自己这条联系人,则能看到这条联系人(防止登录问题)
规则三: 如果遇到结算单地址, 发货地址, 其他地址(联系人),则通过校验(我们先期尽量少改动,以防止和交易/公司等相关的业务模块遇到问题)
在这里插入图片描述5. 重复执行步骤3, 然后将名称改成res.partner.rule.selas.alldoc, 将群组修改成销售/用户: 所有文档. 然后保存
备注: 对于下拉框式样的权限选择器,下级自动包含上级的所有权限
在这里插入图片描述

  1. 重复执行步骤3, 但是不点击复制了,而是点击有效按钮, 让其失效(即存档,不发挥作用)
  2. 最终列表页面,使用联系人查询的结果应该是这样的
    在这里插入图片描述8. 执行步骤1的反向操作,关闭开发者模式

效果:

普通用户只能看到自己创建的联系人
在这里插入图片描述如果被授予了 销售/用户: 所有文档 或者向上的权限,则能够看到所有联系人

遗憾:

当点击自己这个用户关联的联系人的时候,会出现下面保存,
这是因为自己的账号不是自己创建的(废话,当然是管理员创建的),
当加载管理员之类的联系人的时候,遇到了权限错误
但是实际应用中很少有人很无聊的去点击自己这个联系人,所以影像不大
在这里插入图片描述

风险:

配置数据规则的时候,有很大的风险让系统崩溃,所以任何改动应该在测试/开发环境先试验,以防止宕机

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值