首页 > 其他分享 >odoo17开发教程(5):权限的简单介绍

odoo17开发教程(5):权限的简单介绍

时间:2024-03-14 15:33:51浏览次数:27  
标签:教程 name odoo17 perm test model 权限 id

在之前的文章中,我们创建了第一个用于存储业务数据的表。在 Odoo 这样的商业应用程序中,首先要考虑的问题之一是谁可以访问数据。Odoo 提供了一种安全机制,允许特定用户组访问数据。

本章旨在对权限有个最低要求对了解

数据文件(CSV)

Odoo 是一个高度数据驱动的系统。虽然行为是通过 Python 代码定制的,但模块的部分价值在于加载时设置的数据。加载数据的一种方式是通过 CSV 文件。其中一个例子就是在安装基础模块时加载的国家列表。

"id","country_id:id","name","code"
state_au_1,au,"Australian Capital Territory","ACT"
state_au_2,au,"New South Wales","NSW"
state_au_3,au,"Northern Territory","NT"
state_au_4,au,"Queensland","QLD"
...
  • id 是外部标识符(external identifier)。它可以用来引用记录,而不需要知道其在数据库中的标识符。
  • country_id:id 使用外部标识符来指代国家。
  • name 是国家的名称。
  • code 是国家的代码。

这三个字段是定义中 res.country.state 模型中的(这里只需要了解一下):

class CountryState(models.Model):
    _description = "Country state"
    _name = 'res.country.state'
    _order = 'code'

    country_id = fields.Many2one('res.country', string='Country', required=True)
    name = fields.Char(string='State Name', required=True,
               help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton')
    code = fields.Char(string='State Code', help='The state code.', required=True)

按照惯例,导入数据的文件位于模块的数据文件夹中。当数据与安全相关时,它位于安全文件夹中。如果数据与视图和操作有关(我们将在后面介绍),则会放在视图文件夹中。此外,所有这些文件都必须在 __manifest__.py 文件的数据列表中声明。我们的示例文件定义在基础模块的清单中。

所以我们的模块目录结构现在是这样的:

请注意,只有在安装或更新模块时才会加载数据文件的内容。

为什么这些对安全性很重要?因为模型的所有安全配置都是通过数据文件加载的,我们将在下一节看到。

权限控制


当模型上没有定义访问权限时,Odoo 确定没有用户可以访问数据。甚至在日志中也有通知:

WARNING rd-demo odoo.modules.loading: The models ['estate.property'] have no access rules in module estate, consider adding some, like:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink

访问权限被定义为 ir.model.access 模型的记录。每个访问权限都与一个模型、一个组(全局访问则无组)和一组权限相关联:创建、读取、写入和取消链接(unlink,"等同于 "删除)。这些访问权限通常定义在一个名为 ir.model.access.csv 的 CSV 文件中。

下面是我们之前的 test_model 的示例:

id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_test_model,access_test_model,model_test_model,base.group_user,1,0,0,0
  1. id: 权限记录的唯一标识符。这在模块的数据文件中用于引用和修改权限记录。在你的例子中,它是 access_test_model

  2. name: 权限的名称。这通常用于描述性文档和查找,没有技术上的影响。在这里,它也是 access_test_model

  3. model_id/id: 关联的模型的外键。这指定了权限规则将应用于哪个模型。格式通常为 model_<model_name>,在你的例子中是 model_test_model,这意味着权限将应用于 test_model 模型。

  4. group_id/id: 关联的用户组的外键。这指定了哪个用户组拥有这些权限。格式通常为 module_name.group_name,在你的例子中是 base.group_user,表示这些权限适用于“内置用户”组的成员。

  5. perm_read: 读权限。如果设置为 1(或 true),则指定用户组的成员可以读取该模型的记录。在你的例子中,它被设置为 1,意味着用户可以读取 test_model 的记录。

  6. perm_write: 写权限。如果设置为 1(或 true),则指定用户组的成员可以修改该模型的记录。在你的例子中,它被设置为 0(或 false),意味着用户不能修改 test_model 的记录。

  7. perm_create: 创建权限。如果设置为 1(或 true),则指定用户组的成员可以创建该模型的新记录。在你的例子中,它被设置为 0,意味着用户不能在 test_model 中创建新的记录。

  8. perm_unlink: 删除权限。如果设置为 1(或 true),则指定用户组的成员可以删除该模型的记录。在你的例子中,它被设置为 0,意味着用户不能删除 test_model 的记录。

总之,这条权限规则意味着属于“内置用户”组的用户可以查看 test_model 模型的记录,但不能对其进行修改、创建或删除操作。这种权限设置在实际应用中有助于限制用户对数据的操作,确保数据的完整性和安全性。

实践:给我们之前创建的estate_property模型创建权限

在estate/security/ir.model.access.csv文件里加入以下权限控制:

id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_estate_property,access_estate_property,model_estate_property,base.group_user,1,1,1,1

好的,重启容器:docker restart <container_id>

很棒!你已经学会了基础的权限控制。

ir开头,指的是Internal Resources内部资源,这个前缀用于标识核心模块和基础设施的一部分,涵盖了系统级的功能和配置,包括但不限于模型访问权限、数据模型(对象)、UI视图、工作流程、报告和技术特性等。

标签:教程,name,odoo17,perm,test,model,权限,id
From: https://blog.csdn.net/loethen/article/details/136647042

相关文章

  • 国内GPT4.0升级支付宝充值流程,2024年3月9日最新教程
    前言最近,有很多中国用户在充值ChatGPTPLUS会员的时候,会收到如下提示:您的信用卡被拒绝了。请尝试使用借记卡支付。这可能是由于多种原因导致的,例如:信息填写错误,信用卡已过期、信用额度不足、卡片被冻结等等各种原因。首先,需要确定的是,你是不是用的国内的信用卡?目前所有国内开......
  • PostgreSQL从入门到精通教程 - 第46讲:poc-tpch测试
       PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第46讲:POC-TPCH测试  内容1:TPC-H介绍内容2:TPC-H......
  • 基于springboot的高校招生系统(含源码+sql+视频导入教程+文档+PPT)
    ......
  • vue的axios教程
    ajax技术:不重新加载整个页面的情况下,异步地与服务器进行通信,并更新页面的部分内容Ajax(AsynchronousJavaScriptandXML)是一种使用JavaScript向服务器发送和接收数据的技术。Ajax的工作原理基于以下关键组件:XMLHttpRequest对象:XMLHttpRequest是浏览器提供的API,用......
  • python教程(中更新中)
    递归函数在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。举个例子,我们来计算阶乘n!=1x2x3x...xn,用函数fact(n)表示,可以看出:����(�)=�!=1×2×3×⋅⋅⋅×(�−1)×�=(�−1)!×�=����(�−1)×�fact(n)=n!=1×2×3×⋅⋅⋅×(n−1)×n=(n−1)!×n......
  • GitLab中用户的五种权限 Guest、Reporter、Developer、Master、Owner
     ......
  • Windows下一个普通权限的账户,怎么启动一个有管理员权限的进程
    我们知道,如果Windows下一个普通权限的账户,直接启动管理员权限的进程,会弹出输入管理员账号密码的提示窗。但是如果我想通过自启动一个管理员权限的进程怎么办呢,既然都自启动了,还要我输入账号密码就说不过去了。一开始尝试了任务计划程序中的“运行任务时,请使用下列用户账户”,赋值......
  • git 如何 实现 svn那样对某个文件的权限?
    Git和SVN在设计哲学和版本控制机制上有很大的不同,这也导致它们在处理文件和目录权限时有所不同。SVN是集中式的版本控制系统,可以很方便地对文件和目录设置细粒度的权限。而Git是分布式的版本控制系统,其设计初衷是为了让开发者之间更容易地协作,而不是对文件和目录进行细粒度......
  • FreeRTOS教程4 消息队列
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)KeilµVision5IDE(MDK-Arm)野火DAP仿真器XCOMV2.6串口助手2、学习目标本文主要学习FreeRTOS消息队列的相关知识,包括消息队列概述、创建删除复位队列、写入/读取数据到队列等关于队列的基础知......
  • Windows Docker Desktop安装教程
    1.前言这里只介绍windowsdocker安装方式,linux及macos安装方式请自行网上搜索2.下载dockerdocker官网下载地址:https://www.docker.com/get-started/3.安装dockerdesktop3.1双击exe,点击OK进行安装3.2等待安装3.3点击继续,电脑重启3.4双击运行dockerdesktop3.5点击Ac......