如何保护Odoo默认管理员帐户?

时间:2019-11-03 22:21:12

标签: odoo

Odoo 12 CE遇到以下问题。

在创建数据库时创建的默认管理员的类型为Administrator / Settings。为简单起见,我们将其命名为User1。 User1创建User2。 User1授予User2的管理员/访问权限。现在User2可以:

  • 删除用户1?!?!

  • 自我提升为管理员/设置?!?!

我们如何防止User2采取上述两项措施,从而保护User1?

预先感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

这是一个好问题。 {strong>仅保护superuser(或您所说的AdministratorUser1,以防止激活/停用删除。但是,您可以从Administrator/Access Rights的权限中删除superuser

我们可以看到在12.0/odoo/addons/base/models/res_users.pysuperuser类)中保护Users的安全性已完成:

编辑记录方法:

@api.multi
def write(self, values):
    if values.get('active') and SUPERUSER_ID in self._ids:
        raise UserError(_("You cannot activate the superuser."))
    if values.get('active') == False and self._uid in self._ids:
        raise UserError(_("You cannot deactivate the user you're currently logged in as."))
    ...

删除记录方法:

@api.multi
def unlink(self):
    if SUPERUSER_ID in self.ids:
        raise UserError(_('You can not remove the admin user as it is used internally for resources created by Odoo (updates, module installation, ...)'))
    db = self._cr.dbname
    for id in self.ids:
        self.__uid_cache[db].pop(id, None)
    self._invalidate_session_cache()
    return super(Users, self).unlink()

我们该怎么做才能进一步确保安全?:

要防止任何人(除superuser本身外)触摸superuser,可以在write类的Users方法的开头添加以下代码(在前面提到的路径中):

if SUPERUSER_ID in self.ids and self._uid != SUPERUSER_ID :
    raise UserError(_('You can not edit the admin!'))