如果用户在JavaScript中属于多个组,我正在尝试执行操作。
所以我有以下代码,它有效:
Users.call('has_group', ['group1']).done(function(belongs_to_group1) {
if (belongs_to_group1 == true)
Users.call('has_group', ['group2']).done(function(belongs_to_group2) {
if (belongs_to_group2 == true)
Users.call('has_group', ['group3']).done(function(belongs_to_group3) {
if (belongs_to_group3 == true)
perform_the_action();
else
return;
});
else
return;
});
else
return;
});
问题是它看起来很糟糕,我想知道是否有更简单的方法来实现这一点,例如:
Users.call('has_group', ['group1', 'group2', 'group3']).done(function(belongs_to_all_groups) { ... }
但最后一行根本不起作用。有什么想法吗?
答案 0 :(得分:1)
没有简单的方法可以实现这一点 - has_group方法当时只需要一个组(并且它必须是带有点的完全限定组名),但您可以通过继承{{1}轻松编写自己的方法通过在python中更改几行代码:
res_users
我希望这种方法有效(没有检查它的实际效果,只是修改了https://github.com/odoo/odoo/blob/7a483a85d46a7298b0b3d27efeefbcd2a11772c4/openerp/addons/base/res/res_users.py#L552中的现有方法) - 我猜之后你从最后一行调用就没问题了。
答案 1 :(得分:1)
因为你需要在python文件中创建另一个属于 res.users 模型的方法,你应该检查该用户是否属于多个组,然后你需要使用这个自定义方法的JavaScript。
我只是想知道如何做到这一点(但是代码可能无法直接执行)
@api.model
def customize_has_groups(self, groups_ext_ids):
"""here groups_ext_ids is a list of groups(external_id may be)"
if not groups_ext_ids:
return False
user = self.env.user
for group in groups_ext_ids:
group_id = self.env.ref(group).id
if group_id in user.groups_id:
return False
return True
如果任何组不属于用户,则此方法返回false。您可能需要根据您的要求更新方法行为。
然后你可以通过单个json_rpc调用来实现结果。
Users.call('customize_has_groups', ['group1', 'group2', 'group3']).done(function(belongs_to_all_groups) { ... }