0

我正在尝试在 OpenERP 7.0 中定义一个记录规则,该规则允许不在官员组中的用户仅更改他们自己的员工记录,同时仍保留现有的全局规则,允许官员组中的用户拥有完全权限。我已经设置了具有以下详细信息的自定义规则:

  • 名称:User_edit_own_employee_rule
  • 对象:员工
  • 申请阅读:勾选
  • 申请写:勾选
  • 规则定义:[('user_id', '=', user.id)]

然而,这一切似乎只是消除了用户读取除他们自己之外的任何员工记录的能力。据我所知,我需要将此规则与逻辑 OR 运算符与适用于 Office 组中用户的组规则结合起来。任何人都可以给我任何关于如何实现这一点的指示吗?

编辑:我想要的行为是:

  • 所有用户(员工组)都可以搜索和阅读所有员工记录。
  • 员工组中的用户可以编辑他们自己的员工记录,但不能编辑其他人。
  • 官员组中的用户可以编辑所有员工记录(这是 HR 模块的默认行为)。

到目前为止尝试过:

  • 修改上述记录规则(User_edit_own_employee_rule),使其仅适用于写入操作,而不适用于读取操作(用户可以查看所有员工记录,但不能编辑任何记录,包括他们自己的记录)。
  • 修改hr.employee 系统用户访问控制规则以允许写入操作(用户现在可以编辑所有员工记录)。

我的一个线索是,使用 API 在 shell 中返回员工的 user_id,OpenERP 返回[5, 'Joe Bloggs']. 我想知道我的记录规则是否正确查询外键关系?

4

1 回答 1

3

提供访问规则是解决方案的一部分。如果您查看“设置 > 技术 > 安全 > 访问控制列表”中的“访问控制列表”,您可以看到 Hr Employee 组对模型 hr.employee 仅具有读取权限。因此,首先您还必须为 Employee 组的模型 hr.employee 提供写访问权限。在您允许对模型 hr.employee 的组 Employee 进行写访问后,

  • 从 Settings > Technical > Security > Record Rules 创建一个名为 User_edit_own_employee_rule 的新记录规则(如您所愿)。
  • 为此组 User_edit_own_employee_rule 提供域作为 [('user_id', '=', user.id)]。并且这个域应该申请读写。IE; 通过选中“申请读取”和“申请写入”布尔字段。
  • 创建另一个名为 User_edit_own_employee_rule_1 的记录规则
  • 为此组 User_edit_own_employee_rule 提供域为 [('user_id', '!=', user.id)]。并且这个域应该申请只读。IE; 勾选“申请阅读”。

现在通过为 Employee 组创建两条记录规则,我们可以提供读取和写入他/她自己的记录的权限,但只能读取其他员工记录。

让我总结一下:

在访问控制列表中为组 Employee 建模 hr.employee 提供写入访问权限。创建两条记录规则:

User_edit_own_employee_rule :

  • 名称: User_edit_own_employee_rule
  • 对象:员工
  • 申请阅读:勾选
  • 申请写:勾选
  • 规则定义: [('user_id', '=', user.id)]
  • 组:人力资源/员工

User_edit_own_employee_rule_1 :

  • 名称: User_edit_own_employee_rule_1
  • 对象:员工
  • 申请阅读:勾选
  • 申请写入:未选中
  • 规则定义: [('user_id', '!=', user.id)]
  • 组:人力资源/员工

希望这可以帮助....

于 2013-11-04T13:06:11.313 回答