首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Odoo17 4模型安全访问控制:深入理解 model_id:id 和 group_id:id

  • 25-04-25 08:01
  • 4640
  • 6527
blog.csdn.net

核心概念:外部标识符(External ID)

在 Odoo 中,model_id:id 和 group_id:id 字段的值,如 my_hostel.model_hostel_hostel 和 my_hostel.group_hostel_manager,并不是直接的数据库 ID,而是外部标识符。

  • 外部标识符(External ID)是什么?

    • 它是一个字符串,格式为 .,例如 my_hostel.model_hostel_hostel。
    • 它在整个 Odoo 系统中唯一地标识一个数据库记录。
    • 它通常用于在 XML 文件中引用数据库记录,例如在定义访问控制规则时。
  • 为什么使用外部标识符?

    • 避免硬编码 ID: 使用数据库 ID 最大的问题是,这些 ID 在不同的 Odoo 实例中可能不同。如果直接使用 ID,会导致代码无法跨实例移植。外部标识符则保证了跨实例的唯一性。
    • 更易读: 外部标识符使用有意义的名称,而不是难以理解的数字 ID,提高代码可读性。
    • 方便模块化: 使用外部标识符,模块之间的关联更加清晰,可以轻松地引用其他模块中的数据。

详细解释 model_id:id 和 group_id:id

  1. model_id:id

    • 作用: 此字段用于指定 访问规则 应用于哪个 模型 (数据库表)。
    • 值: 是一个外部标识符,例如 my_hostel.model_hostel_hostel。
      • my_hostel: 模块名称。
      • model_hostel_hostel: 在 my_hostel 模块中,定义 hostel.hostel 模型时的内部名称 (External ID)。注意,这里不是直接的模型名称 hostel.hostel,而是一个在 ir.model 中表示 hostel.hostel 的记录的名称 (通常以 model_ 开头)。
    • 解析过程:
      1. Odoo 根据点号 (.) 分割外部标识符:my_hostel (模块名) 和 model_hostel_hostel(模型记录名)。
      2. Odoo 在 ir.model 表中查找 module 字段 等于 my_hostel 并且 name 字段 等于 hostel.hostel (注意:这里是真实的模型名称) 的记录 (实际上,Odoo 内部会根据模块和模型名称生成一个 ir.model 记录)。
      3. 如果找到匹配的记录,Odoo 将获取该记录的 id 字段 的值,并将其作为 model_id:id 的值,记录到访问控制规则中。
  2. group_id:id

    • 作用: 此字段用于指定 访问规则 应用于哪个 用户组。
    • 值: 是一个外部标识符,例如 my_hostel.group_hostel_manager 或 my_hostel.group_hostel_user。
      • my_hostel: 模块名称。
      • group_hostel_manager 或 group_hostel_user: 在 my_hostel 模块中定义的用户组的内部名称 (External ID)。
    • 解析过程:
      1. Odoo 根据点号 (.) 分割外部标识符:my_hostel (模块名) 和 group_hostel_manager 或 group_hostel_user(用户组记录名)。
      2. Odoo 在 res.groups 表中查找 module 字段 等于 my_hostel 并且 name 字段 等于 hostel.manager (注意: 这里是用户组名称) 的记录 (实际上,Odoo 内部会根据模块和用户组名称生成一个 res.groups 记录)。
      3. 如果找到匹配的记录,Odoo 将获取该记录的 id 字段 的值,并将其作为 group_id:id 的值,记录到访问控制规则中。

举例说明

假设在你的 my_hostel 模块中,你定义了 hostel.hostel 模型,并且定义了 hostel.manager 和 hostel.user 这两个用户组。

  1. ir.model 表中的记录:

    Odoo 在你安装 my_hostel 模块时会自动在 ir.model 表中创建一条记录,表示 hostel.hostel 模型:

    idmodulemodelname…
    10my_hostelhostel.hostelmodel_hostel_hostel…

    假设这条记录的 id 是 10 。那么当 Odoo 解析 my_hostel.model_hostel_hostel 时,就会取 id=10。

  2. res.groups 表中的记录:

    Odoo 在你安装 my_hostel 模块时会自动在 res.groups 表中创建两条记录,表示 hostel.manager 和 hostel.user 这两个用户组:

    idmodulename…
    15my_hostelhostel.manager…
    16my_hostelhostel.user…

假设这两条记录的 id 分别为 15 和 16。 那么当 Odoo 解析 my_hostel.group_hostel_manager 时,就会取 id=15; 解析 my_hostel.group_hostel_user 时,就会取 id=16。

  1. 访问规则:

    在你的 ir.model.access.csv 文件中,你可以有这样的规则:

    id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
    access_hostel_manager,hostel.manager.access,my_hostel.model_hostel_hostel,my_hostel.group_hostel_manager,1,1,1,1
    access_hostel_user,hostel.user.access,my_hostel.model_hostel_hostel,my_hostel.group_hostel_user,1,0,0,0
    
    • 1
    • 2
    • 3
    • access_hostel_manager: 表示 hostel.manager 用户组对 hostel.hostel 模型有读、写、创建和删除的权限。
    • access_hostel_user: 表示 hostel.user 用户组对 hostel.hostel 模型只有读的权限。

    在数据库中, Odoo 会将规则记录为:

    idmodel_idgroup_idperm_readperm_writeperm_createperm_unlink
    …10151111
    …10161000

总结

  • model_id:id 和 group_id:id 使用外部标识符,而不是数据库 ID,以便跨 Odoo 实例保持一致性。
  • Odoo 会根据这些外部标识符在 ir.model 和 res.groups 表中查找对应的记录,并获取其 id 值,从而实现对模型和用户组的引用。
  • 这种方式使得访问控制规则更加灵活和可维护。
注:本文转载自blog.csdn.net的山上春的文章"https://blog.csdn.net/Min_Xiansen/article/details/144827651"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

128
网络空间安全
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top