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

时间:2016-05-25 10:34:36

标签: 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) {
            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) { ... }

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

2 个答案:

答案 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) { ... }