Odoo 12 CE遇到以下问题。
在创建数据库时创建的默认管理员的类型为Administrator / Settings。为简单起见,我们将其命名为User1。 User1创建User2。 User1授予User2的管理员/访问权限。现在User2可以:
删除用户1?!?!
自我提升为管理员/设置?!?!
我们如何防止User2采取上述两项措施,从而保护User1?
预先感谢您的任何建议。
答案 0 :(得分:0)
这是一个好问题。 {strong>仅保护superuser
(或您所说的Administrator
或User1
,以防止激活/停用和删除。但是,您可以从Administrator/Access Rights
的权限中删除superuser
。
我们可以看到在12.0/odoo/addons/base/models/res_users.py
(superuser
类)中保护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!'))