【问题标题】:How to secure Odoo default Administrator account?如何保护 Odoo 默认管理员帐户?
【发布时间】:2019-11-06 16:11:24
【问题描述】:

下面描述的问题在 Odoo 12 CE 上遇到过。

在创建数据库时创建的默认管理员是管理员/设置类型。为简单起见,我们将其命名为 User1。用户 1 创建用户 2。 User1 将管理员/访问权限授予 User2。现在 User2 能够:

  • 删除用户 1 ?!?!

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

我们如何防止 User2 执行上述两项操作,从而保护 User1?

提前感谢您的任何建议。

【问题讨论】:

    标签: odoo


    【解决方案1】:

    这是个好问题。 superuser(或您所称的 AdministratorUser1针对激活/停用删除进行保护。但是,您可以从superuser 的权限中删除Administrator/Access Rights

    我们可以看到为保护12.0/odoo/addons/base/models/res_users.pyUsers 类)中的superuser 所做的工作:

    编辑记录方法:

    @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,您可以在Users类的write方法的开头添加以下代码(在前面提到的路径中):

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

    【讨论】:

    • 不要忘记正确识别新代码并重新启动服务器以使更改生效。
    猜你喜欢
    • 2022-08-18
    • 2019-12-19
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多