self.env.user 为什么总是指向超级用户?
-
把你的代码show一下吧
-
-
代码能贴全点吗?哪里调用了这个方法,这个方法对应的类定义?另外你用的Odoo的版本号?调试的打印结果是什么?
-
背景是我添加了一个布尔类型的can_write计算字段,用于判断当前用户是否有权限填写某项目。这个方法在model中只有字段里compute处有调用,即:
can_write = fields.Boolean(compute='_can_write', store=False, readonly=True)
我用的odoo版本是11版的。
没有报错信息,只是不能输入(即没有写如权限),即这个方法中,state in ['apply', 'partner']时,can_write判断为false,我print输出了self.env.user.employee_ids[0].id 和self.parent_id.id, 发现确实不一致,前者始终指向admin, 包括self.env.uid也是如此。 -
可以推断你这个计算字段是定义在
hr.employee
对象上的。你在
elif
的判断条件里有一个错误:
self.env.user.employee_ids[0].id == self.parent_id
应该是:
self.env.user.employee_ids[0].id == self.parent_id.id
self.env.user.employee_ids[0].id 和self.parent_id.id, 发现确实不一致,前者始终指向admin, 包括self.env.uid也是如此。
好象得不出当前user总是root user的结论啊。前者是指
self.env.user.employee_ids[0].id
吧?这个是employee的id另外,这样的判断在碰到没有关联Employee的用户时,系统直接就报错了。
-
self._uid
和self.env.uid
是一回事, 参见models.py_cr = property(lambda self: self.env.cr) _uid = property(lambda self: self.env.uid) _context = property(lambda self: self.env.context)
他们默认的情况下跟session context中的uid都是当前登录用户, 但是我们是可以通过
with_env
方法来改变环境用户的, 比如:print(self.env.uid) --> 1 self.with_env(self.env(user=5)) print(self.env.uid) --> 5
-
@digitalsatori 这个我是了解的,我有在其他地方print输出测试过,所以了解。_can_write函数本身就是针对单例情况的,嗯,我考虑一下,看看怎么改合适。