在 Odoo 中,要实现多公司、多网站下不同公司、不同销售团队的权限划分,需要综合运用 Odoo 的多公司(Multi Company)、多网站(Multi Website)以及用户、组(Groups)、访问权限(Access Rights)等功能。
以下是详细的划分思路和具体操作步骤:
Odoo 多公司、多网站权限划分核心逻辑
- 多公司 (Multi Company): Odoo 的多公司功能允许您在同一个数据库中管理多个独立的法人实体。每个公司都有自己独立的账务、库存、联系人等数据。权限划分的核心在于限制用户只能访问属于自己公司的数据。
- 多网站 (Multi Website): Odoo 的多网站功能允许您为不同的公司或业务线创建独立的网站,这些网站可以拥有独立的产品目录、主题、设计和语言。权限划分与公司紧密关联,但需要确保特定网站的内容只对特定公司的用户可见或可编辑。
- 用户 (Users): 每个操作 Odoo 的员工都需要一个用户账号。
- 组 (Groups): Odoo 使用组来管理权限。将用户分配到特定的组,然后为这些组分配相应的访问权限。这是实现精细化权限控制的关键。
- 访问权限 (Access Rights): 定义了某个组(或用户)对某个模型(如产品、订单、联系人)的读、写、创建、删除(CRUD)权限。
- 记录规则 (Record Rules): 这是实现多公司数据隔离和销售团队权限划分的核心。记录规则可以在模型级别上过滤数据,确保用户只能看到或操作属于他们公司或他们负责销售的客户。
具体操作步骤
第一步:配置多公司和多网站
- 启用多公司:
- 进入 设置 (Settings) > 技术 (Technical) > 参数 (Parameters) > 系统参数 (System Parameters)。
- 搜索
multi_company并确保其值为True。 - 重新登录 Odoo,您将看到公司切换器。
- 创建公司:
- 进入 设置 (Settings) > 公司 (Companies)。
- 点击 创建 (Create),填写新公司的信息(名称、地址、税号等)。
- 重要: 在创建或编辑公司时,确保勾选 "这个公司是我的公司" (This company is my company),用于标识当前数据库的主要公司。
- 启用多网站:
- 进入 设置 (Settings) > 网站 (Websites)。
- 确保 "多网站" (Multi Website) 选项已启用(通常情况下,安装了Website模块后就会有)。
- 创建网站:
- 进入 网站 (Websites) > 网站 (Websites)。
- 点击 创建 (Create),填写新网站的信息(名称、域名等)。
- 关联网站与公司: 这是关键一步。在创建或编辑网站时,有一个 "公司" (Company) 字段。将此网站关联到您希望它所属的公司。
第二步:创建用户和销售团队
- 创建用户:
- 进入 设置 (Settings) > 用户与公司 (Users & Companies) > 用户 (Users)。
- 为每个销售人员创建用户账号。
- 创建销售团队:
- 进入 销售 (Sales) > 配置 (Configuration) > 销售团队 (Sales Teams)。
- 点击 创建 (Create)。
- 公司关联: 在创建销售团队时,有一个 "公司" (Company) 字段。为每个公司创建属于该公司的销售团队。
- 团队成员: 在销售团队中添加相关的销售人员用户。
- 网站关联(可选但推荐): 如果您想将销售团队与特定网站关联,可以在销售团队的设置中找到类似 "默认网站" (Default Website) 或通过其他模块实现(例如,对于某些CRM集成)。但更常见的是,销售团队的权限会通过用户、组和记录规则间接与公司和网站关联。
第三步:配置用户组和访问权限
这是实现精细化权限划分的核心。
- 基础用户组:
- Odoo 已经预设了一些基础用户组,例如:
- 内部用户 (Internal User): 具有对大多数内部应用的访问权限。
- 销售用户 (Sales User): 具有对销售应用的访问权限。
- 多公司用户 (Multi Company User): 允许用户在不同公司之间切换。
- Odoo 已经预设了一些基础用户组,例如:
- 创建自定义用户组(推荐):
- 为了更精细地控制权限,建议为每个公司和每个销售团队创建自定义用户组。
- 进入 设置 (Settings) > 技术 (Technical) > 安全 (Security) > 用户组 (Groups)。
- 点击 创建 (Create)。
- 命名规范: 建议使用清晰的命名,例如:
[公司A] 销售团队 X[公司B] 销售团队 Y[公司A] 网站 Z 销售管理员
- 父组: 将您的自定义组继承自更通用的组,例如
销售用户 (Sales User)或内部用户 (Internal User),这样可以保留基础的访问权限,在此基础上进行限制。
- 配置访问权限:
- 为每个自定义组分配模型级别的访问权限。
- 进入 设置 (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)
记录规则是实现多公司数据隔离和销售团队权限的最强大工具。
- 为公司隔离数据:
- 进入 设置 (Settings) > 技术 (Technical) > 安全 (Security) > 记录规则 (Record Rules)。
- 点击 创建 (Create)。
- 模型: 选择需要进行隔离的模型,例如
res.partner(联系人)。 - 名称:
[公司A] 仅限公司A联系人 - 域 (Domain):
[('company_id', '=', user.company_id.id)]- 解释:这个规则表示,当前用户能看到的联系人,其
company_id必须等于当前用户所属的公司 ID。
- 解释:这个规则表示,当前用户能看到的联系人,其
- 应用范围: 选择哪个组(或用户)适用此规则。将此规则应用到所有属于 公司A 的销售团队组。
- 对其他模型重复此操作: 对
sale.order,product.template,account.move(发票) 等所有涉及公司数据的模型都创建类似的记录规则。
- 为销售团队隔离数据:
- 如果某个销售团队只负责特定范围的客户或产品,您也可以通过记录规则实现。
- 示例: 某个销售团队只负责 VIP 客户。
- 模型:
res.partner - 名称:
[销售团队X] 仅限VIP客户 - 域:
[('customer', '=', True), ('x_is_vip', '=', True)](假设您在联系人模型中添加了一个 "VIP" 字段x_is_vip) - 应用范围: 应用到 销售团队X 的用户组。
- 模型:
- 更多场景: 销售团队可能只负责某个特定区域的客户,或只负责某些类别产品。这些都可以通过在记录规则中添加相应的过滤条件来实现。
- 网站相关的记录规则:
- 产品可见性: 确保某个公司或销售团队只能看到属于其公司的产品,并且这些产品也已发布到他们关联的网站上。
- 模型:
product.template - 域:
[('company_id', '=', user.company_id.id)](确保公司隔离) - 补充: 您可能还需要考虑产品在网站上的发布状态。
- 模型:
- 网站内容: 如果您希望某个销售团队能够编辑特定网站上的产品描述或内容,需要为
website模型或website.page模型创建记录规则,并赋予相应的编辑权限。
- 产品可见性: 确保某个公司或销售团队只能看到属于其公司的产品,并且这些产品也已发布到他们关联的网站上。
第五步:用户角色与公司/网站的关联
- 用户配置:
- 进入 设置 (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.partner,sale.order等模型的读写权限。 - 为
[公司B] 销售B1 团队分配对res.partner,sale.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 团队。
- 规则 1:
- 对
sale.order等其他关键模型重复上述公司隔离规则。
- 模型
- 用户配置:
- 将 xxx 分配到
[公司A] 销售A1 团队组。 - 将 yyy 分配到
[公司A] 销售A2 团队组。 - 将 zzz 分配到
[公司B] 销售B1 团队组。 - 确保 xxx, yyy, zzz 的用户配置中,"我的公司" 包含他们所属的公司。
- 将 xxx 分配到
场景 2: 公司 A 的销售团队 A1 负责网站 A 的产品销售,并且可以修改网站 A 的部分产品信息。
- 在场景 1 的基础上:
- 记录规则:
- 模型
product.template:- 规则 3:
[公司A] 销售A1 仅限公司A产品, 域[('company_id', '=', user.company_id.id)], 应用于[公司A] 销售A1 团队。 (确保公司隔离)
- 规则 3:
- 模型
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 的模块和模型。
- 规则 4:
- 如果您需要允许销售 A1 修改网站 A 上的产品信息,您需要找到相关的模型(例如,可能涉及
- 模型
重要提示和最佳实践
- 从小处开始: 不要一次性设置所有权限。先从核心的公司隔离开始,然后逐步细化到销售团队。
- 使用继承: 在创建自定义用户组时,务必继承自 Odoo 内置的通用组,例如
Internal User,Sales 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:针对公司A团队,用户只能看到
- 这确保销售团队成员无法跨公司或跨团队查看数据(例如,团队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. 实施步骤总结
- 设置公司和网站。
- 创建销售团队并关联公司/网站。
- 配置用户:分配公司、团队、网站。
- 定义记录规则隔离数据。
- 测试并调整。
这种划分确保数据隔离、安全合规。如果您的 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. 权限测试和验证
测试步骤
- 登录公司A销售员
- 只能看到公司A的销售线索
- 只能访问公司A的销售团队
- 只能看到公司A的产品和客户
- 登录公司B销售员
- 只能看到公司B的销售线索
- 只能访问公司B的销售团队
- 只能看到公司B的产品和客户
- 经理权限测试
- 创建跨公司用户组
- 验证可以看到所有公司数据
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中,通过“多公司”、“多网站”和“销售团队”的组合,可以构建出非常灵活且隔离的业务权限体系。
下面我将分步详细解释如何划分不同公司、不同销售团队的权限,并说明多网站是如何与这个体系关联的。
核心概念理解
- 多公司 (Multi-Company): 这是Odoo权限隔离的最高层级。每个核心业务单据(如销售订单、发票、库存调拨、会计分录等)都必须属于一个公司。用户可以被授权访问一个或多个公司。
- 多网站 (Multi-Website): 网站是面向客户的界面。每个网站都必须关联到一个公司。这意味着通过网站A产生的订单会自动属于公司A。
- 销售团队 (Sales Team): 销售团队用于组织销售人员、管理销售管道和报告。每个销售团队也必须关联到一个公司。
- 权限控制三驾马车:
- 访问权限 (Access Rights): 定义用户对某个模型(如“销售订单”)是否有创建、读取、修改、删除(CRUD)的权限。这是“能不能碰”的问题。
- 记录规则 (Record Rules): 在访问权限的基础上,进一步增加过滤条件,定义用户能看到哪些记录。例如,“只能看到自己公司的销售订单”。这是“能碰哪些”的问题。
- 用户设置 (User Configuration): 用户档案中的“允许的公司”字段是多公司权限的基石。
第一步:配置多公司权限
这是最基础也是最关键的一步。用户的公司权限决定了他能看到的数据的顶层边界。
- 激活多公司功能:
- 进入
设置 (Settings)->常规设置 (General Settings)。 - 在“公司 (Companies)”部分,勾选
多公司 (Multi-companies)并保存。
- 进入
- 创建公司:
- 进入
设置 (Settings)->用户 & 公司 (Users & Companies)->公司 (Companies)。 - 创建你需要的公司,例如“公司A(零售)”和“公司B(批发)”。
- 进入
- 为用户分配公司权限(核心步骤):
- 进入
设置 (Settings)->用户 & 公司 (Users & Companies)->用户 (Users)。 - 选择一个用户进行编辑,例如“销售员张三”。
- 你会看到两个关键字段:
- 允许的公司 (Allowed Companies): 这是一个多选字段。在这里选择张三可以访问的所有公司。例如,如果张三只为“公司A”工作,这里就只选择“公司A”。如果他是集团经理,可以同时选择“公司A”和“公司B”。
- 默认公司 (Default Company): 当用户登录时,系统默认进入的公司。必须是“允许的公司”之一。
- 进入
效果:
完成这一步后,Odoo会自动应用内置的记录规则。当张三登录后,他在任何模块(销售、库存、会计等)看到的所有数据,都会被自动过滤,只显示属于“公司A”的记录。他创建的任何新记录(如报价单)也会自动归属到他当前所在的“公司A”。
第二步:配置多网站并关联到公司
多网站的权限是建立在多公司权限之上的。
- 创建和配置网站:
- 进入
网站 (Website)应用。 - 在右上角,你可以
新建网站 (New Website)。 - 创建“网站A”和“网站B”。
- 进入
- 将网站关联到公司(核心步骤):
- 进入
网站 (Website)应用 ->配置 (Configuration)->设置 (Settings)。 - 在左上角,你可以切换并分别为每个网站进行配置。
- 选择“网站A”,在配置页面找到 公司 (Company) 字段,将其设置为“公司A(零售)”。
- 切换到“网站B”,将其 公司 (Company) 字段设置为“公司B(批发)”。
- 进入
效果:
- 从“网站A”前台下的所有订单,都会自动创建为“公司A”的销售订单。
- 拥有“公司A”权限的后台用户(如张三)可以看到并处理这些订单。
- 只拥有“公司B”权限的用户,将完全看不到“网站A”产生的任何订单和相关数据。
第三步:配置销售团队权限(精细化控制)
现在我们来处理更细致的需求:同一个公司内,不同销售团队之间的数据隔离。这需要用到“记录规则”。
假设在“公司A”内部,有两个销售团队:“华东团队”和“华北团队”。我们希望每个团队的成员只能看到自己团队的商机和报价单。
- 创建销售团队并关联公司:
- 进入
CRM应用 ->配置 (Configuration)->销售团队 (Sales Teams)。 - 创建“华东团队”,确保其“公司”字段设置为“公司A”。
- 创建“华北团队”,确保其“公司”字段也设置为“公司A”。
- 进入
- 将用户分配到销售团队:
- 在销售团队的设置页面,将团队成员添加进去。例如,将“张三”加入“华东团队”。
- 创建记录规则以隔离数据(高级步骤):
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是一个动态变量,代表当前登录用户的销售团队列表)的所有商机。
- 名称 (Name):
- 对销售订单重复此操作:
- 为
销售订单 (sale.order)模型创建类似的记录规则,使用相同的域。
- 为
- 激活开发者模式:
效果:
- “华东团队”的张三登录后,在CRM中只能看到未分配的商机和属于“华东团队”的商机。他将看不到“华北团队”的任何数据。
- “华北团队”的李四登录后,也只能看到未分配的和属于“华北团队”的数据。
- 他们的经理,如果没有被这个记录规则限制(例如,属于更高权限的组,如“销售/管理员”),则仍然可以看到公司A下的所有商机和订单。
综合实战案例
场景:
- 公司: A公司(中国业务),B公司(美国业务)
- 网站: A网站 (中文), B网站 (英文)
- 团队: A公司下有“线上销售团队”和“线下销售团队”
- 用户:
- 王五: A公司“线上销售团队”成员。
- 赵六: A公司“线下销售团队”成员。
- John: B公司销售经理。
- Admin: 超级管理员。
配置步骤:
- 用户王五:
- 用户设置: 允许的公司 =
[A公司], 默认公司 =A公司。 - 销售团队: 加入“线上销售团队”。
- 权限组: 加入
销售/用户:仅限自己团队(应用了我们上面创建的记录规则的组)。 - 结果: 王五只能看到A公司的数据,且只能看到“线上销售团队”和未分配的商机/订单。他能处理来自A网站的订单。
- 用户设置: 允许的公司 =
- 用户赵六:
- 用户设置: 允许的公司 =
[A公司], 默认公司 =A公司。 - 销售团队: 加入“线下销售团队”。
- 权限组: 加入
销售/用户:仅限自己团队。 - 结果: 赵六只能看到A公司的数据,且只能看到“线下销售团队”和未分配的商机/订单。
- 用户设置: 允许的公司 =
- 用户John:
- 用户设置: 允许的公司 =
[B公司], 默认公司 =B公司。 - 权限组: 加入
销售/管理员。 - 结果: John能看到B公司的所有销售数据,包括所有团队。他能处理来自B网站的订单。他完全看不到A公司的任何信息。
- 用户设置: 允许的公司 =
- 用户Admin:
- 用户设置: 允许的公司 =
[A公司, B公司]。 - 权限组: 拥有所有权限。
- 结果: Admin可以在右上角切换公司,查看和管理所有公司、所有网站、所有团队的数据。
- 用户设置: 允许的公司 =
总结
划分Odoo多公司、多网站、多团队权限的逻辑是层层递进的:
- 以“公司”为基础: 通过用户的
允许的公司字段,实现最高级别的数据隔离。这是Odoo权限体系的基石。 - 以“网站”为入口: 将每个网站绑定到特定公司,确保前端流量和数据正确归属。
- 以“销售团队”和“记录规则”为工具: 在公司内部,实现更精细化的数据访问控制,确保团队之间的数据保密性。
只要遵循这个逻辑,你就可以构建出既清晰又安全的多业务实体管理系统。在实施复杂规则前,务必在测试环境中充分验证。
Odoo多公司多网站权限划分

被折叠的 条评论
为什么被折叠?



