Javascript 如何检查用户是否属于Odoo中的多个组?
如果一个用户属于多个组,我将尝试在JavaScript中执行一个操作 因此,我有以下代码,它是有效的: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
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) { ... }