开源odoo19 多公司 多主体 全球化 多网站 如何划分不同公司 不同BU事业群 不同销售团队权限

Odoo多公司多网站权限划分

在 Odoo 中,要实现多公司、多网站下不同公司、不同销售团队的权限划分,需要综合运用 Odoo 的多公司(Multi Company)、多网站(Multi Website)以及用户、组(Groups)、访问权限(Access Rights)等功能。

以下是详细的划分思路和具体操作步骤:

Odoo 多公司、多网站权限划分核心逻辑

  1. 多公司 (Multi Company): Odoo 的多公司功能允许您在同一个数据库中管理多个独立的法人实体。每个公司都有自己独立的账务、库存、联系人等数据。权限划分的核心在于限制用户只能访问属于自己公司的数据
  2. 多网站 (Multi Website): Odoo 的多网站功能允许您为不同的公司或业务线创建独立的网站,这些网站可以拥有独立的产品目录、主题、设计和语言。权限划分与公司紧密关联,但需要确保特定网站的内容只对特定公司的用户可见或可编辑
  3. 用户 (Users): 每个操作 Odoo 的员工都需要一个用户账号。
  4. 组 (Groups): Odoo 使用组来管理权限。将用户分配到特定的组,然后为这些组分配相应的访问权限。这是实现精细化权限控制的关键。
  5. 访问权限 (Access Rights): 定义了某个组(或用户)对某个模型(如产品、订单、联系人)的读、写、创建、删除(CRUD)权限。
  6. 记录规则 (Record Rules): 这是实现多公司数据隔离和销售团队权限划分的核心。记录规则可以在模型级别上过滤数据,确保用户只能看到或操作属于他们公司或他们负责销售的客户。

具体操作步骤

第一步:配置多公司和多网站

  1. 启用多公司:
    • 进入 设置 (Settings) > 技术 (Technical) > 参数 (Parameters) > 系统参数 (System Parameters)
    • 搜索 multi_company 并确保其值为 True
    • 重新登录 Odoo,您将看到公司切换器。
  2. 创建公司:
    • 进入 设置 (Settings) > 公司 (Companies)
    • 点击 创建 (Create),填写新公司的信息(名称、地址、税号等)。
    • 重要: 在创建或编辑公司时,确保勾选 "这个公司是我的公司" (This company is my company),用于标识当前数据库的主要公司。
  3. 启用多网站:
    • 进入 设置 (Settings) > 网站 (Websites)
    • 确保 "多网站" (Multi Website) 选项已启用(通常情况下,安装了Website模块后就会有)。
  4. 创建网站:
    • 进入 网站 (Websites) > 网站 (Websites)
    • 点击 创建 (Create),填写新网站的信息(名称、域名等)。
    • 关联网站与公司: 这是关键一步。在创建或编辑网站时,有一个 "公司" (Company) 字段。将此网站关联到您希望它所属的公司。

第二步:创建用户和销售团队

  1. 创建用户:
    • 进入 设置 (Settings) > 用户与公司 (Users & Companies) > 用户 (Users)
    • 为每个销售人员创建用户账号。
  2. 创建销售团队:
    • 进入 销售 (Sales) > 配置 (Configuration) > 销售团队 (Sales Teams)
    • 点击 创建 (Create)
    • 公司关联: 在创建销售团队时,有一个 "公司" (Company) 字段。为每个公司创建属于该公司的销售团队。
    • 团队成员: 在销售团队中添加相关的销售人员用户。
    • 网站关联(可选但推荐): 如果您想将销售团队与特定网站关联,可以在销售团队的设置中找到类似 "默认网站" (Default Website) 或通过其他模块实现(例如,对于某些CRM集成)。但更常见的是,销售团队的权限会通过用户、组和记录规则间接与公司和网站关联。

第三步:配置用户组和访问权限

这是实现精细化权限划分的核心。

  1. 基础用户组:
    • Odoo 已经预设了一些基础用户组,例如:
      • 内部用户 (Internal User): 具有对大多数内部应用的访问权限。
      • 销售用户 (Sales User): 具有对销售应用的访问权限。
      • 多公司用户 (Multi Company User): 允许用户在不同公司之间切换。
  2. 创建自定义用户组(推荐):
    • 为了更精细地控制权限,建议为每个公司和每个销售团队创建自定义用户组。
    • 进入 设置 (Settings) > 技术 (Technical) > 安全 (Security) > 用户组 (Groups)
    • 点击 创建 (Create)
    • 命名规范: 建议使用清晰的命名,例如:
      • [公司A] 销售团队 X
      • [公司B] 销售团队 Y
      • [公司A] 网站 Z 销售管理员
    • 父组: 将您的自定义组继承自更通用的组,例如 销售用户 (Sales User) 或 内部用户 (Internal User),这样可以保留基础的访问权限,在此基础上进行限制。
  3. 配置访问权限:
    • 为每个自定义组分配模型级别的访问权限。
    • 进入 设置 (Settings) > 技术 (Technical) > 对象与数据库 (Objects & Databases) > 模型 (Models)
    • 找到您想要控制的模型(例如:res.partner (联系人), sale.order (销售订单), product.template (产品), website (网站), crm.team (销售团队))。
    • 点击模型的 "访问权限" (Access Rights) 按钮。
    • 为您的自定义组分配 读取 (Read)写入 (Write)创建 (Create)删除 (Unlink) 权限。
    • 关键:
      • 公司A的销售团队X 应该只能看到属于 公司A 的数据,并且只能操作与 公司A 相关的销售订单、联系人等。
      • 公司B的销售团队Y 应该只能看到属于 公司B 的数据。
      • 网站Z的销售管理员 可能需要对 网站Z 的内容有更高级的编辑权限(例如,产品描述、页面内容),但仍然受限于 公司A

第四步:配置记录规则 (Record Rules)

记录规则是实现多公司数据隔离和销售团队权限的最强大工具。

  1. 为公司隔离数据:
    • 进入 设置 (Settings) > 技术 (Technical) > 安全 (Security) > 记录规则 (Record Rules)
    • 点击 创建 (Create)
    • 模型: 选择需要进行隔离的模型,例如 res.partner (联系人)。
    • 名称: [公司A] 仅限公司A联系人
    • 域 (Domain): [('company_id', '=', user.company_id.id)]
      • 解释:这个规则表示,当前用户能看到的联系人,其 company_id 必须等于当前用户所属的公司 ID。
    • 应用范围: 选择哪个组(或用户)适用此规则。将此规则应用到所有属于 公司A 的销售团队组。
    • 对其他模型重复此操作: 对 sale.orderproduct.templateaccount.move (发票) 等所有涉及公司数据的模型都创建类似的记录规则。
  2. 为销售团队隔离数据:
    • 如果某个销售团队只负责特定范围的客户或产品,您也可以通过记录规则实现。
    • 示例: 某个销售团队只负责 VIP 客户。
      • 模型: res.partner
      • 名称: [销售团队X] 仅限VIP客户
      • 域: [('customer', '=', True), ('x_is_vip', '=', True)] (假设您在联系人模型中添加了一个 "VIP" 字段 x_is_vip)
      • 应用范围: 应用到 销售团队X 的用户组。
    • 更多场景: 销售团队可能只负责某个特定区域的客户,或只负责某些类别产品。这些都可以通过在记录规则中添加相应的过滤条件来实现。
  3. 网站相关的记录规则:
    • 产品可见性: 确保某个公司或销售团队只能看到属于其公司的产品,并且这些产品也已发布到他们关联的网站上。
      • 模型: product.template
      • 域: [('company_id', '=', user.company_id.id)] (确保公司隔离)
      • 补充: 您可能还需要考虑产品在网站上的发布状态。
    • 网站内容: 如果您希望某个销售团队能够编辑特定网站上的产品描述或内容,需要为 website 模型或 website.page 模型创建记录规则,并赋予相应的编辑权限。

第五步:用户角色与公司/网站的关联

  1. 用户配置:
    • 进入 设置 (Settings) > 用户与公司 (Users & Companies) > 用户 (Users)
    • 编辑每个用户的配置。
    • 公司:
      • "我的公司" (My Companies): 允许用户在其中切换的公司列表。
      • "主要公司" (Company): 当用户不明确选择公司时,默认使用哪个公司。
    • 用户组: 将用户分配到之前创建的自定义用户组。

示例场景分析

场景 1: 公司 A 有两个销售团队 (销售A1, 销售A2),公司 B 有一个销售团队 (销售B1)。

  • 公司: 创建 "公司 A" 和 "公司 B"。
  • 网站: 创建 "网站 A" (关联公司 A) 和 "网站 B" (关联公司 B)。
  • 销售团队:
    • 创建 "销售 A1" (公司: 公司 A, 成员: xxx)
    • 创建 "销售 A2" (公司: 公司 A, 成员: yyy)
    • 创建 "销售 B1" (公司: 公司 B, 成员: zzz)
  • 用户组:
    • 创建 [公司A] 销售A1 团队 (继承自 销售用户)
    • 创建 [公司A] 销售A2 团队 (继承自 销售用户)
    • 创建 [公司B] 销售B1 团队 (继承自 销售用户)
  • 访问权限:
    • 为 [公司A] 销售A1 团队 和 [公司A] 销售A2 团队 分配对 res.partnersale.order 等模型的读写权限。
    • 为 [公司B] 销售B1 团队 分配对 res.partnersale.order 等模型的读写权限。
  • 记录规则:
    • 模型 res.partner:
      • 规则 1: [公司A] 仅限公司A联系人, 域 [('company_id', '=', user.company_id.id)], 应用于 [公司A] 销售A1 团队 和 [公司A] 销售A2 团队
      • 规则 2: [公司B] 仅限公司B联系人, 域 [('company_id', '=', user.company_id.id)], 应用于 [公司B] 销售B1 团队
    • 对 sale.order 等其他关键模型重复上述公司隔离规则。
  • 用户配置:
    • 将 xxx 分配到 [公司A] 销售A1 团队 组。
    • 将 yyy 分配到 [公司A] 销售A2 团队 组。
    • 将 zzz 分配到 [公司B] 销售B1 团队 组。
    • 确保 xxx, yyy, zzz 的用户配置中,"我的公司" 包含他们所属的公司。

场景 2: 公司 A 的销售团队 A1 负责网站 A 的产品销售,并且可以修改网站 A 的部分产品信息。

  • 在场景 1 的基础上:
  • 记录规则:
    • 模型 product.template:
      • 规则 3: [公司A] 销售A1 仅限公司A产品, 域 [('company_id', '=', user.company_id.id)], 应用于 [公司A] 销售A1 团队。 (确保公司隔离)
    • 模型 website 或 website.product.template (取决于Odoo版本和安装的模块):
      • 如果您需要允许销售 A1 修改网站 A 上的产品信息,您需要找到相关的模型(例如,可能涉及 website.snippet.config 或 website.content 等),并创建规则。
      • 示例 (概念性): 假设有一个 website.product.info 模型。
        • 规则 4: [公司A] 销售A1 编辑网站A产品信息, 域 [('website_id', '=', 'website_A_id'), ('company_id', '=', 'Company_A_id')], 应用于 [公司A] 销售A1 团队,并授予 写入 权限。
        • 注意: 网站内容的权限管理可能比数据记录更复杂,需要仔细检查 Odoo 的模块和模型。

重要提示和最佳实践

  • 从小处开始: 不要一次性设置所有权限。先从核心的公司隔离开始,然后逐步细化到销售团队。
  • 使用继承: 在创建自定义用户组时,务必继承自 Odoo 内置的通用组,例如 Internal UserSales User。这样可以避免丢失基础功能。
  • 记录规则是关键: 绝大多数的数据可见性和操作限制都可以通过记录规则来实现。
  • 测试: 在为用户分配权限后,务必以该用户的身份登录 Odoo 进行测试,验证权限是否符合预期。
  • 文档记录: 详细记录您创建的每个用户组、访问权限和记录规则的目的,以及它们如何影响不同用户。这将有助于日后的维护和排查问题。
  • Odoo 版本: Odoo 的功能和模块会随版本更新。某些特定的网站内容编辑权限可能需要安装额外的模块(如 website_sale_multicompany 等),或者需要针对特定模块创建自定义规则。
  • 安全参数: 检查 Odoo 的安全参数,例如 auth_signup_enable (是否允许注册) 等,确保您的安全策略完整。

通过以上步骤的组合,您就可以在 Odoo 中实现多公司、多网站下不同公司、不同销售团队的精细化权限划分,确保数据安全和业务流程的有效管理。

Grok-4-Fast

Odoo 多公司与多网站权限划分概述

Odoo 支持多公司(Multi-Company)和多网站(Multi-Website)功能,这允许您在单一实例中管理多个业务实体(如不同子公司或品牌)。权限划分主要依赖于用户组(User Groups)记录规则(Record Rules)公司访问权限网站特定配置。以下是针对不同公司和不同销售团队的权限划分指南,基于 Odoo 标准机制(适用于 Odoo 14+ 版本,具体细节可能因版本略有差异)。

1. 多公司基础设置
  • 启用多公司:在“设置 > 用户与公司 > 公司”中创建多个公司(例如,公司A和公司B)。每个公司有独立的会计、销售、库存等数据。
  • 用户公司分配:在用户设置(“设置 > 用户与公司 > 用户”)中,为每个用户分配“允许的公司”(Allowed Companies)。用户只能访问分配的公司数据。
    • 示例:销售团队1 只分配公司A,销售团队2 只分配公司B。
  • 默认公司:为用户设置默认公司,确保登录时自动切换到其所属公司。
2. 销售团队权限划分
  • 创建销售团队:在“销售 > 配置 > 销售团队”中创建团队(如“公司A销售团队”和“公司B销售团队”)。每个团队可以关联特定公司。
    • 团队设置中,选择“公司”字段,限制团队仅适用于该公司。
  • 用户分配到团队:在用户设置中,将用户添加到特定销售团队(“销售 > 配置 > 用户”或用户表单的“销售团队”字段)。
    • 示例:用户小明加入“公司A销售团队”,则其只能创建/查看属于公司A的销售订单。
  • 记录规则(Record Rules)
    • 路径: “设置 > 技术 > 安全 > 记录规则”。
    • 创建规则限制销售订单(sale.order)访问,例如:
      • 规则1:针对公司A团队,用户只能看到 company_id = 当前用户公司 的订单。
      • 规则2:针对销售团队,添加 team_id in 当前用户团队 的条件。
    • 这确保销售团队成员无法跨公司或跨团队查看数据(例如,团队1 看不到团队2 的机会或报价)。
3. 多网站集成与权限
  • 启用多网站:安装“Website”模块,在“网站 > 配置 > 网站”中创建多个网站(例如,网站A对应公司A,网站B对应公司B)。
    • 每个网站可以关联特定公司(在网站设置中选择“公司”)。
  • 网站与销售团队关联
    • 在销售团队设置中,选择“网站”字段,将团队绑定到特定网站(例如,团队1 只服务网站A)。
    • 这会自动过滤网站上的表单、产品和订单,仅显示/处理所属团队的数据。
  • 用户网站访问权限
    • 在用户设置中,添加“网站”访问权限(“设置 > 用户与公司 > 用户 > 访问权限”标签)。
    • 示例:销售团队1 用户只分配网站A 访问权,则他们在网站A 上可以管理询价/订单,但无法访问网站B。
    • 对于后端用户,结合记录规则限制:例如,销售订单规则添加 website_id = 当前用户网站
  • 前端权限:网站访客通过网站表单提交的 leads/opportunities 会自动分配到对应网站的销售团队(基于网站配置)。
4. 高级权限配置与最佳实践
  • 用户组(Groups)
    • 使用内置组如“销售/销售主管”(Sales / Manager)或自定义组。
    • 路径: “设置 > 用户与公司 > 组”,为不同团队创建子组(如“公司A销售员”),并应用记录规则。
    • 示例:组“公司A销售团队”继承“销售/用户”权限,但通过规则限制公司和网站。
  • 跨公司共享(可选)
    • 如果需要部分共享(如共享产品目录),在记录规则中使用“ir.rule”域名允许特定条件下的访问,但避免过度开放以防数据泄露。
    • 对于多网站,启用“多网站共享库存”或“共享产品”选项,但销售数据仍按团队隔离。
  • 测试与审计
    • 以不同用户登录测试权限(使用“调试模式”查看记录规则生效)。
    • 启用审计日志(“设置 > 技术 > 审计日志”)监控跨公司访问。
  • 常见问题解决
    • 如果用户看到跨公司数据,检查“允许的公司”设置和记录规则的“全局”标签(应为 False 以限制)。
    • 多网站下,产品/类别需在“网站”字段中指定可见性。
5. 实施步骤总结
  1. 设置公司和网站。
  2. 创建销售团队并关联公司/网站。
  3. 配置用户:分配公司、团队、网站。
  4. 定义记录规则隔离数据。
  5. 测试并调整。

这种划分确保数据隔离、安全合规。如果您的 Odoo 版本或自定义模块有特殊需求,建议参考官方文档(odoo.com/documentation)或咨询 Odoo 合作伙伴。需要更具体的 XML 配置示例吗?

DeepSeek-V3.2

在Odoo中实现多公司、多网站环境下不同销售团队的权限划分,需要综合运用多个Odoo权限机制。以下是详细的配置方案:

1. 基础公司结构配置

创建公司并启用多公司模式

xml复制代码收起

<!-- 在设置中启用多公司 -->
<record id="base_setup_multicompany" model="res.config.settings">
    <field name="group_multi_company">True</field>
</record>

复制

2. 销售团队与公司关联

为每个公司创建独立的销售团队

python复制代码收起

# 销售团队模型添加公司字段
class CrmTeam(models.Model):
    _inherit = 'crm.team'
    
    company_id = fields.Many2one('res.company', string='公司', required=True)

复制

配置示例

  • 公司A:销售团队A
  • 公司B:销售团队B
  • 公司C:销售团队C

3. 用户权限配置

创建用户组结构

xml复制代码收起

<!-- 公司A销售团队组 -->
<record id="group_company_a_sales" model="res.groups">
    <field name="name">公司A销售团队</field>
    <field name="users" eval="[(4, ref('base.user_admin'))]"/>
    <field name="implied_ids" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
</record>

<!-- 公司B销售团队组 -->
<record id="group_company_b_sales" model="res.groups">
    <field name="name">公司B销售团队</field>
    <field name="users" eval="[(4, ref('base.user_admin'))]"/>
    <field name="implied_ids" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
</record>

复制

4. 记录规则配置

销售线索记录规则

xml复制代码收起

<!-- 公司A销售只能看到公司A的线索 -->
<record id="crm_lead_company_a_rule" model="ir.rule">
    <field name="name">公司A销售线索权限</field>
    <field name="model_id" ref="model_crm_lead"/>
    <field name="domain_force">
        ['|', ('company_id', '=', False), ('company_id', '=', user.company_id.id)]
    </field>
    <field name="groups" eval="[(4, ref('group_company_a_sales'))]"/>
</record>

<!-- 公司B销售只能看到公司B的线索 -->
<record id="crm_lead_company_b_rule" model="ir.rule">
    <field name="name">公司B销售线索权限</field>
    <field name="model_id" ref="model_crm_lead"/>
    <field name="domain_force">
        ['|', ('company_id', '=', False), ('company_id', '=', user.company_id.id)]
    </field>
    <field name="groups" eval="[(4, ref('group_company_b_sales'))]"/>
</record>

复制

销售团队记录规则

xml复制代码收起

<!-- 限制只能看到自己公司的销售团队 -->
<record id="crm_team_company_rule" model="ir.rule">
    <field name="name">销售团队公司权限</field>
    <field name="model_id" ref="model_crm_team"/>
    <field name="domain_force">
        ['|', ('company_id', '=', False), ('company_id', 'in', user.company_ids.ids)]
    </field>
    <field name="groups" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
</record>

复制

5. 多网站集成配置

网站与公司关联

python复制代码收起

class Website(models.Model):
    _inherit = 'website'
    
    company_id = fields.Many2one('res.company', string='关联公司', required=True)

复制

网站特定销售团队

xml复制代码收起

<!-- 网站A配置 -->
<record id="website_a" model="website">
    <field name="name">网站A</field>
    <field name="company_id" ref="company_a"/>
    <field name="crm_team_id" ref="crm_team_a"/>
</record>

<!-- 网站B配置 -->
<record id="website_b" model="website">
    <field name="name">网站B</field>
    <field name="company_id" ref="company_b"/>
    <field name="crm_team_id" ref="crm_team_b"/>
</record>

复制

6. 用户配置

为用户分配公司和权限

python复制代码收起

# 用户配置示例
user_company_a = {
    'name': '销售员A',
    'login': 'sales_a@company.com',
    'groups_id': [(4, ref('group_company_a_sales'))],
    'company_ids': [(4, ref('company_a')), (4, ref('company_b'))],  # 可访问的公司
    'company_id': ref('company_a'),  # 默认公司
}

user_company_b = {
    'name': '销售员B', 
    'login': 'sales_b@company.com',
    'groups_id': [(4, ref('group_company_b_sales'))],
    'company_ids': [(4, ref('company_b'))],
    'company_id': ref('company_b'),
}

复制

7. 自动化规则配置

根据网站自动分配销售团队

python复制代码收起

class CrmLead(models.Model):
    _inherit = 'crm.lead'
    
    @api.model
    def create(self, vals):
        # 根据网站自动设置公司和销售团队
        website_id = self.env.context.get('website_id')
        if website_id:
            website = self.env['website'].browse(website_id)
            if website.company_id:
                vals['company_id'] = website.company_id.id
            if website.crm_team_id:
                vals['team_id'] = website.crm_team_id.id
        return super(CrmLead, self).create(vals)

复制

8. 权限测试和验证

测试步骤

  1. 登录公司A销售员
    • 只能看到公司A的销售线索
    • 只能访问公司A的销售团队
    • 只能看到公司A的产品和客户
  2. 登录公司B销售员
    • 只能看到公司B的销售线索
    • 只能访问公司B的销售团队
    • 只能看到公司B的产品和客户
  3. 经理权限测试
    • 创建跨公司用户组
    • 验证可以看到所有公司数据

9. 高级配置选项

共享客户但隔离销售活动

xml复制代码收起

<!-- 客户记录规则 - 可查看但限制操作 -->
<record id="res_partner_multi_company_rule" model="ir.rule">
    <field name="name">客户多公司权限</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="domain_force">
        ['|', ('company_id', '=', False), ('company_id', 'in', user.company_ids.ids)]
    </field>
</record>

复制

销售订单隔离

xml复制代码收起

<!-- 销售订单公司隔离 -->
<record id="sale_order_company_rule" model="ir.rule">
    <field name="name">销售订单公司权限</field>
    <field name="model_id" ref="model_sale_order"/>
    <field name="domain_force">
        ['|', ('company_id', '=', False), ('company_id', '=', user.company_id.id)]
    </field>
</record>

复制

总结

通过以上配置,可以实现:

  • ✅ 公司隔离:不同公司的销售数据完全隔离
  • ✅ 团队隔离:每个公司有独立的销售团队
  • ✅ 网站集成:不同网站对应不同公司和销售团队
  • ✅ 权限控制:基于用户组的精细权限管理
  • ✅ 自动化分配:根据来源自动分配对应公司和团队

这种架构确保了多公司环境下销售团队的数据安全和操作独立性。

Gemini 2.5 Pro优惠版

追问

引用

复制

复制MD

重试

思考了 37 秒

好的,这是一个非常经典且重要的Odoo实施问题。在Odoo中,通过“多公司”、“多网站”和“销售团队”的组合,可以构建出非常灵活且隔离的业务权限体系。

下面我将分步详细解释如何划分不同公司、不同销售团队的权限,并说明多网站是如何与这个体系关联的。


核心概念理解

  1. 多公司 (Multi-Company): 这是Odoo权限隔离的最高层级。每个核心业务单据(如销售订单、发票、库存调拨、会计分录等)都必须属于一个公司。用户可以被授权访问一个或多个公司。
  2. 多网站 (Multi-Website): 网站是面向客户的界面。每个网站都必须关联到一个公司。这意味着通过网站A产生的订单会自动属于公司A。
  3. 销售团队 (Sales Team): 销售团队用于组织销售人员、管理销售管道和报告。每个销售团队也必须关联到一个公司
  4. 权限控制三驾马车:
    • 访问权限 (Access Rights): 定义用户对某个模型(如“销售订单”)是否有创建、读取、修改、删除(CRUD)的权限。这是“能不能碰”的问题。
    • 记录规则 (Record Rules): 在访问权限的基础上,进一步增加过滤条件,定义用户能看到哪些记录。例如,“只能看到自己公司的销售订单”。这是“能碰哪些”的问题。
    • 用户设置 (User Configuration): 用户档案中的“允许的公司”字段是多公司权限的基石。

第一步:配置多公司权限

这是最基础也是最关键的一步。用户的公司权限决定了他能看到的数据的顶层边界。

  1. 激活多公司功能:
    • 进入 设置 (Settings) -> 常规设置 (General Settings)
    • 在“公司 (Companies)”部分,勾选 多公司 (Multi-companies) 并保存。
  2. 创建公司:
    • 进入 设置 (Settings) -> 用户 & 公司 (Users & Companies) -> 公司 (Companies)
    • 创建你需要的公司,例如“公司A(零售)”和“公司B(批发)”。
  3. 为用户分配公司权限(核心步骤):
    • 进入 设置 (Settings) -> 用户 & 公司 (Users & Companies) -> 用户 (Users)
    • 选择一个用户进行编辑,例如“销售员张三”。
    • 你会看到两个关键字段:
      • 允许的公司 (Allowed Companies): 这是一个多选字段。在这里选择张三可以访问的所有公司。例如,如果张三只为“公司A”工作,这里就只选择“公司A”。如果他是集团经理,可以同时选择“公司A”和“公司B”。
      • 默认公司 (Default Company): 当用户登录时,系统默认进入的公司。必须是“允许的公司”之一。

效果:
完成这一步后,Odoo会自动应用内置的记录规则。当张三登录后,他在任何模块(销售、库存、会计等)看到的所有数据,都会被自动过滤,只显示属于“公司A”的记录。他创建的任何新记录(如报价单)也会自动归属到他当前所在的“公司A”。


第二步:配置多网站并关联到公司

多网站的权限是建立在多公司权限之上的。

  1. 创建和配置网站:
    • 进入 网站 (Website) 应用。
    • 在右上角,你可以 新建网站 (New Website)
    • 创建“网站A”和“网站B”。
  2. 将网站关联到公司(核心步骤):
    • 进入 网站 (Website) 应用 -> 配置 (Configuration) -> 设置 (Settings)
    • 在左上角,你可以切换并分别为每个网站进行配置。
    • 选择“网站A”,在配置页面找到 公司 (Company) 字段,将其设置为“公司A(零售)”。
    • 切换到“网站B”,将其 公司 (Company) 字段设置为“公司B(批发)”。

效果:

  • 从“网站A”前台下的所有订单,都会自动创建为“公司A”的销售订单。
  • 拥有“公司A”权限的后台用户(如张三)可以看到并处理这些订单。
  • 只拥有“公司B”权限的用户,将完全看不到“网站A”产生的任何订单和相关数据。

第三步:配置销售团队权限(精细化控制)

现在我们来处理更细致的需求:同一个公司内,不同销售团队之间的数据隔离。这需要用到“记录规则”。

假设在“公司A”内部,有两个销售团队:“华东团队”和“华北团队”。我们希望每个团队的成员只能看到自己团队的商机和报价单。

  1. 创建销售团队并关联公司:
    • 进入 CRM 应用 -> 配置 (Configuration) -> 销售团队 (Sales Teams)
    • 创建“华东团队”,确保其“公司”字段设置为“公司A”。
    • 创建“华北团队”,确保其“公司”字段也设置为“公司A”。
  2. 将用户分配到销售团队:
    • 在销售团队的设置页面,将团队成员添加进去。例如,将“张三”加入“华东团队”。
  3. 创建记录规则以隔离数据(高级步骤):
    Odoo默认的权限只到公司级别,要实现团队级别隔离,需要自定义记录规则。
    • 激活开发者模式设置 (Settings) -> 激活开发者模式 (Activate the developer mode)
    • 进入 设置 (Settings) -> 技术 (Technical) -> 安全 (Security) -> 记录规则 (Record Rules)
    • 创建新规则:
      • 名称 (Name)CRM Lead - Team Members Only (或其他描述性名称)
      • 对象/模型 (Object/Model)商机/管道 (crm.lead)
      • 访问权限 (Access Rights): 全部勾选 (Create, Read, Write, Delete)。
      • 应用范围/组 (Groups): 选择一个应用此规则的权限组。最佳实践是创建一个新组,例如 销售/用户:仅限自己团队,然后将销售人员加入这个组。为了简化,你也可以应用到 销售/用户:所有单据
      • 域 (Domain / 域过滤器): 这是最核心的部分。输入以下代码:

        复制代码收起

        ['|', ('team_id', '=', False), ('team_id', 'in', user.sale_team_ids)]

        复制

        域解释:
        • '|' 表示 "或" (OR) 条件。
        • ('team_id', '=', False): 允许用户看到尚未分配给任何团队的商机。这很重要,否则无人认领的商机将无人可见。
        • ('team_id', 'in', user.sale_team_ids): 允许用户看到其所属销售团队(user.sale_team_ids 是一个动态变量,代表当前登录用户的销售团队列表)的所有商机。
    • 对销售订单重复此操作:
      • 为 销售订单 (sale.order) 模型创建类似的记录规则,使用相同的域。

效果:

  • “华东团队”的张三登录后,在CRM中只能看到未分配的商机和属于“华东团队”的商机。他将看不到“华北团队”的任何数据。
  • “华北团队”的李四登录后,也只能看到未分配的和属于“华北团队”的数据。
  • 他们的经理,如果没有被这个记录规则限制(例如,属于更高权限的组,如“销售/管理员”),则仍然可以看到公司A下的所有商机和订单。

综合实战案例

场景:

  • 公司: A公司(中国业务),B公司(美国业务)
  • 网站: A网站 (中文), B网站 (英文)
  • 团队: A公司下有“线上销售团队”和“线下销售团队”
  • 用户:
    • 王五: A公司“线上销售团队”成员。
    • 赵六: A公司“线下销售团队”成员。
    • John: B公司销售经理。
    • Admin: 超级管理员。

配置步骤:

  1. 用户王五:
    • 用户设置: 允许的公司 = [A公司], 默认公司 = A公司
    • 销售团队: 加入“线上销售团队”。
    • 权限组: 加入 销售/用户:仅限自己团队 (应用了我们上面创建的记录规则的组)。
    • 结果: 王五只能看到A公司的数据,且只能看到“线上销售团队”和未分配的商机/订单。他能处理来自A网站的订单。
  2. 用户赵六:
    • 用户设置: 允许的公司 = [A公司], 默认公司 = A公司
    • 销售团队: 加入“线下销售团队”。
    • 权限组: 加入 销售/用户:仅限自己团队
    • 结果: 赵六只能看到A公司的数据,且只能看到“线下销售团队”和未分配的商机/订单。
  3. 用户John:
    • 用户设置: 允许的公司 = [B公司], 默认公司 = B公司
    • 权限组: 加入 销售/管理员
    • 结果: John能看到B公司的所有销售数据,包括所有团队。他能处理来自B网站的订单。他完全看不到A公司的任何信息。
  4. 用户Admin:
    • 用户设置: 允许的公司 = [A公司, B公司]
    • 权限组: 拥有所有权限。
    • 结果: Admin可以在右上角切换公司,查看和管理所有公司、所有网站、所有团队的数据。

总结

划分Odoo多公司、多网站、多团队权限的逻辑是层层递进的:

  1. 以“公司”为基础: 通过用户的 允许的公司 字段,实现最高级别的数据隔离。这是Odoo权限体系的基石。
  2. 以“网站”为入口: 将每个网站绑定到特定公司,确保前端流量和数据正确归属。
  3. 以“销售团队”和“记录规则”为工具: 在公司内部,实现更精细化的数据访问控制,确保团队之间的数据保密性。

只要遵循这个逻辑,你就可以构建出既清晰又安全的多业务实体管理系统。在实施复杂规则前,务必在测试环境中充分验证。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值