Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查用户是否属于Odoo中的多个组?_Javascript_Odoo 8_Odoo - Fatal编程技术网

Javascript 如何检查用户是否属于Odoo中的多个组?

Javascript 如何检查用户是否属于Odoo中的多个组?,javascript,odoo-8,odoo,Javascript,Odoo 8,Odoo,如果一个用户属于多个组,我将尝试在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) { i

如果一个用户属于多个组,我将尝试在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) { ... }

但最后一行根本不起作用。有什么想法吗?

没有简单的方法可以实现这一点-has_group method一次只需要一个组(它必须是带点的完全限定组名),但是通过在python中更改几行代码,您可以轻松地将自己的方法继承给
res_用户

@api.noguess
@tools.ormcache('uid', 'groups_ext_id')
def _has_groups(self, cr, uid, groups_ext_id):
    if not isinstance(groups_ext_id, list):
        groups_ext_id = [groups_ext_id]
    for group_ext_id in groups_ext_id:
        assert group_ext_id and '.' in group_ext_id, "External ID must be fully qualified"
        module, ext_id = group_ext_id.split('.')
        cr.execute("""SELECT 1 FROM res_groups_users_rel WHERE uid=%s AND gid IN
                    (SELECT res_id FROM ir_model_data WHERE module=%s AND name=%s)""",
               (uid, module, ext_id))
       if cr.fetchone() == False:
           return False
    return True

我希望这个方法能起作用(没有在实际中检查它,只是修改了现有的一个)-我想在这之后,您从最后一行的调用就可以了。

因为您需要在python文件中创建另一个属于res.users模型的方法,在该模型中,您应该检查用户是否属于多个组,然后您需要在javascript中使用此自定义方法

我只是告诉您如何做到这一点(但是给定的代码可能无法直接执行)

这里,如果任何组不属于用户,则此方法返回false。您可能需要根据需要更新方法行为

然后您可以通过单个json_rpc调用来实现结果

Users.call('customize_has_groups', ['group1', 'group2', 'group3']).done(function(belongs_to_all_groups) { ... }

谢谢你@Mariusz+1但我认为,如果我必须实现功能,因为它还不存在,最好不要覆盖现有的方法,并创建您的方法以防万一。
Users.call('customize_has_groups', ['group1', 'group2', 'group3']).done(function(belongs_to_all_groups) { ... }