7.工作流、安全、记录规则
True

工作流

工作流是与动态业务对象相关联的模型。工作流也用于跟踪动态演进的进程。


练习

#伪工作流
在授课模型上添加一个字段state,用于定义一个工作流程。授课存在三个可能的状态:Draft(草稿,默认值)、Confirmed(已确认)、Done(已完成)。在授课的form视图中,添加一个只读字段用于显示课程状态,并可以通过按钮来改变状态。有效的状态值迁移包括:

  • Draft->Confirmed
  • Confirmed->Draft
  • Confirmed->Done
  • Done->Draft
  1. 添加一个新的字段state
  2. 添加状态迁移方法,这个方法可以被form表单的按钮所调用,用以更改授课的状态
  3. 将相关按钮添加到授课的form视图
    openacademy/models.py

已复制

openacademy/views/openacademy.xml

已复制

 工作流可以与Odoo中的任何对象关联,并且可完全定制化。工作流用于构造和管理业务对象和文档的生命周期,并且通过图形化工具定义转换器、触发器等。
 工作流、动作(节点或操作)和迁移(条件)通常以XML记录行的形式定义。在工作流进行导航的标签称为工作项。

警告
    与模型相关的工作流仅在创建模型记录时被创建。因此,在工作流定义之前创建的授课实例是没有与之对应的工作流实例的。


安全

安全是为了实现统一的安全策略而进行配置的访问控制机制。
基于组的访问控制机制
组是通过在res.groups模型的记录行来创建的,并通过菜单访问权限来限制权限。但是,即使没有菜单,对象仍然可以间接被访问,因此必须为组定义实际的对象级权限(读取、写入、创建、取消关联)。一般通过模块中的CSV文件插入。也可以通过字段的groups属性来限制对视图或对象上特定字段的访问。
访问权限
访问权限通过ir.model.access的记录行来定义。每个访问权限与模型、组(或者非全局访问的组)相关联,并且是一组权限:读取、写入、创建、取消关联。这些访问权限一般通过ir.model.access.csv这个CSV文件创建。

已复制

id:权限的ID不可重复 一般取名为 access_模型名_特定用户组名(用下划线连起来)
name 描述 一般命名沿用模型名用“.”连接加 用户组名
model_id:id:对象,命名是model_模型名(用下划线连起来)
group_id:id  组名称 (模块.用户组名)
下面的,0 表示无权限, 1 表示有权限
perm_read  只读
perm_write 修改
perm_create 创建
perm_unlink 删除

练习
#通过Odoo界面添加访问控制权限
建立一个新用户John Smith,然后建立OpenAcademy/Session Read组,并赋予这个组对授课模型的读权限。

  1. 建立一个新用户John Smit通过 设置->用户->用户
  2. 建立一个新组session_read通过 设置->用户->组,这个组拥有对授课模型的读权限
  3. 编辑John Smith用户,把他加入到session_read
  4. John Smith身份登录系统,检查权限是否正确。

练习
#通过数据文件添加访问控制权限

  • 建立一个组OpenAcademy / Manager,这个组对开放学院的所有模型都有完全权限。
  • SessionCourse对所有用户可读
  1. 建立新的文件openacademy/security/security.xml用来定义OpenAcademy Manager
  2. 编辑文件openacademy/security/ir.model.access.csv来添加对模型的访问权限
  3. 最后更新openacademy/__manifest__.py来添加新的数据文件

openacademy/__manifest__.py


已复制

openacademy/security/ir.model.access.csv

已复制

openacademy/security/security.xml

已复制

记录规则

记录规则限制对给定模型的记录子集的访问权限。一个规则就是ir.rule模型的一行记录,并且将其关联到模型、数组(many2many字段)、或domain。domain指定了对那些记录有访问权限。
这是一个记录规则的例子,这个规则防止非cancel状态的负责人被删除。请注意,groups字段的值必须遵守与ORM的write()方法一样的规则。


已复制

eval:eval的值通过作为python运算返回该属性

ref:视图的方法,根据 module_name.xml_id 返回数据库id

[(6,0,[xx,yy])]

(0,_ ,{field: value}) 这将创建一个新的记录并连接它

(1,id,{field: value}): 这是更新一个已经连接了的记录的值,不能用于create()

(2,id,_) 这是删除或取消连接某个已经连接了的记录不能用于create()

(3,id,_) 这是取消连接但不删除一个已经连接了的记录,不能用于One2many不能用于create()

(4,id,_) 连接一个已经存在的记录,不能用于One2many

(5,_,_) 取消连接但不删除所有已经连接了的记录,不能用于One2many不能用于create()

(6,_,[ids]) 用给出的列表替换掉已经连接了的记录

这里的下划线一般是0False


练习

#记录规则
授课模型和OpenAcademy / Manager组添加记录规则,这个记录规则限制只有课程负责人可以对课程进行writeunlink操作,如果课程还没有负责人,这个组的所有用户都可以编辑它。在openacademy/security/security.xml文件中创建新的规则:
openacademy/security/security.xml

已复制


 record rule    记录是 ir.rule 模型, 存在public.ir_rule 表格中
 model_id 作用于哪个模型 值为 model_模型名
 domain_force 对该模型中所有记录进行某种过滤操作
 常用的 ['|',('user_id','=',user.id),('user_id','=',False)] 表示是自己的单 
 user_id是记录的字段,这个看实际情况改变, user.id 代表当前登录用户的id

 <field name="domain_force">[(1,'=',1)]</field>

 [(1,'=',1)] 表示所有的单
 noupdate 值为1 表示升级模块不会更新本数据
 base.group_user 是人力资源 / 雇员
 perm_read 这些后面,是对 前面模型权限组设定的覆盖

odoo 省市县三级联动模块
True