修改安全记录规则

来自Odoo大V社-odoo中文开发手册
Admin讨论 | 贡献2017年1月10日 (二) 09:32的版本

跳转至: 导航搜索

To-Do 应用程序包括一个记录规则,以确保每个任务只对创建它的用户可见。但现在,随着社交功能的添加,我们需要任务跟随者也访问它们。社交网络模块本身不处理这一点。 此外,现在任务可以有用户分配给他们,因此更有意义的是,访问规则在负责的用户而不是创建任务的用户上工作。 计划将与我们处理菜单项的做法相同:覆盖todo_app.todo_task_user_rule以将domain_force字段修改为新值。 约定是将安全相关文件保存在安全子目录中,因此我们将创建具有以下内容的security / todo_access_rules.xml文件: <?xml version =“1.0”encoding =“utf-8”?> <odoo>    <data noupdate =“1”>      <record id =“todo_app.todo_task_per_user_rule”model =“ir.rule”>        <field name =“name”>所有者和关注者的ToDo任务</ field>        <field name =“model_id”ref =“model_todo_task”/>        <field name =“groups”eval =“[(4,ref('base.group_user'))]”/>        <field name =“domain_force”>['|',('user_id','in',[user.id,False]),('message_follower_ids','in',[user.partner_id.id])] </field>       </ record>     </ data> </ odoo> 这将从 todo_app 模块覆盖 todo_task_per_user_rule 记录规则。新的域过滤器现在使任务对负责用户 user_id可见,或者如果负责用户未设置(等于False),则对任何人都可见。它对所有的任务关注者也是可见的。 记录规则在用户变量可用且表示当前会话用户的记录的上下文中运行。由于关注者是合作伙伴,而不是用户,而不是user.id,我们需要使用user.partner_id。 组字段是一对多关系。在这些字段中编辑数据使用特殊符号。这里使用的代码4是附加到相关记录的列表。也经常使用代码6,而是用新的列表完全替换相关的记录。我们将在第4章,模块数据中更详细地讨论这个标记。 记录元素的noupdate =“1”属性意味着此记录数据将仅在安装操作中写入,并且在模块升级时将被忽略。这允许它进行自定义,而不会承担覆盖自定义的风险,并且在将来某个时间进行模块升级时丢失它们。 小技巧 在开发时使用处理数据文件可能很棘手,因为在模块升级时将忽略对XML定义的后续编辑。为了避免这种情况,您可以重新安装模块。这通过使用-i的命令行更容易完成 像往常一样,我们不能忘记将新文件添加到__manifest__.py中的data属性:

 'data':['views / todo_task.xml',
 'security/todo_access_rules.xml'],