Odoo 8 如何管理相关字段和权限?
How to manage related fields and permissions in Odoo 8?
这个问题从这里开始:How to manage security with One2many fields in Odoo?。但是现在,我把问题简化了,问题不是同一个。
环境和问题相同:
class mother(models.Model):
_name = 'mother'
name = fields.Char(string='Name', size=64, required=True)
is_a_good_mother = fields.Boolean(string='Is a good mother?')
@api.multi
def write(self, vals):
_logger.info('I DO NOT KNOW WHY WHEN CREATING A CHILD THIS ORM '
'METHOD IS BEING EXECUTED, RECEIVING THE KEY '
'is_a_good_mother')
return super(mother, self).write(vals)
class child(models.Model):
_name = 'child'
mother_id = fields.Many2one(comodel_name='mother',
string='Mother', ondelete='cascade')
has_a_good_mother = fields.Boolean(
string='Does the child have a good mother?',
related='mother_id.is_a_good_mother',
related_sudo=True)
我有一个菜单选项可以打开 Child 的形式。此表单是 Odoo 的 auto-generated。
问题
我有一个可以创建和修改 children 的用户,但不能创建和修改 mothers。当此用户创建 child 时,将引发一个安全错误,告知该用户属于无法修改 Mother 模型的组。这是由于行 related='mother_id.is_a_good_mother'
,如果我删除它,并且我创建一个新的 child,Mother 的 ORM write
方法是未调用。
因此,如果 B 有一个相关的 child 指向 A 的任何字段,并且您创建了一条新记录B,调用了A的ORM write
方法。
我有一个安全组 my_group,在 B 和 read 1 create 0 write 0 unlink 0
中有 read 1 create 1 write 1 unlink 1
在 A 中。由于该组的用户不能写A,他在创建B记录时出错。
如何避免这个错误?我试过related_sudo=True
,但是没有用,可能是我没用好。
谁能帮帮我?
相关字段值存储在"mother"对象的原始字段中。因此,当您尝试在 "child" 对象上更改它时,这就是 Odoo 在幕后更新它的地方。如果进行更改的用户没有更改 "mother" 对象的权限,则会引发异常。
您需要确保没有权限更改目标对象的用户无法set/change指向该对象的相关字段的值。例如,您可以将其设置为只读 (readonly=True
).
这个问题从这里开始:How to manage security with One2many fields in Odoo?。但是现在,我把问题简化了,问题不是同一个。
环境和问题相同:
class mother(models.Model):
_name = 'mother'
name = fields.Char(string='Name', size=64, required=True)
is_a_good_mother = fields.Boolean(string='Is a good mother?')
@api.multi
def write(self, vals):
_logger.info('I DO NOT KNOW WHY WHEN CREATING A CHILD THIS ORM '
'METHOD IS BEING EXECUTED, RECEIVING THE KEY '
'is_a_good_mother')
return super(mother, self).write(vals)
class child(models.Model):
_name = 'child'
mother_id = fields.Many2one(comodel_name='mother',
string='Mother', ondelete='cascade')
has_a_good_mother = fields.Boolean(
string='Does the child have a good mother?',
related='mother_id.is_a_good_mother',
related_sudo=True)
我有一个菜单选项可以打开 Child 的形式。此表单是 Odoo 的 auto-generated。
问题
我有一个可以创建和修改 children 的用户,但不能创建和修改 mothers。当此用户创建 child 时,将引发一个安全错误,告知该用户属于无法修改 Mother 模型的组。这是由于行 related='mother_id.is_a_good_mother'
,如果我删除它,并且我创建一个新的 child,Mother 的 ORM write
方法是未调用。
因此,如果 B 有一个相关的 child 指向 A 的任何字段,并且您创建了一条新记录B,调用了A的ORM write
方法。
我有一个安全组 my_group,在 B 和 read 1 create 0 write 0 unlink 0
中有 read 1 create 1 write 1 unlink 1
在 A 中。由于该组的用户不能写A,他在创建B记录时出错。
如何避免这个错误?我试过related_sudo=True
,但是没有用,可能是我没用好。
谁能帮帮我?
相关字段值存储在"mother"对象的原始字段中。因此,当您尝试在 "child" 对象上更改它时,这就是 Odoo 在幕后更新它的地方。如果进行更改的用户没有更改 "mother" 对象的权限,则会引发异常。
您需要确保没有权限更改目标对象的用户无法set/change指向该对象的相关字段的值。例如,您可以将其设置为只读 (readonly=True
).