Use the rules for the group restriction on menu

This commit is contained in:
Cédric Krier
2008-02-21 19:18:47 +01:00
parent 43f347876b
commit 5ee541858a
3 changed files with 38 additions and 25 deletions
-23
View File
@@ -225,27 +225,4 @@ class UIMenu(OSV):
new_id, '', context.get('module')))
return new_id
def search(self, cursor, user, args, offset=0, limit=2000, order=None,
context=None, count=False, query_string=False):
res_user_obj = self.pool.get('res.user')
if context is None:
context = {}
ids = super(UIMenu, self).search(cursor, user, args, offset, limit,
order, context=context)
user_groups = res_user_obj.read(cursor, user, [user])[0]['groups_id']
result = []
for menu in self.browse(cursor, user, ids):
if not len(menu.groups):
result.append(menu.id)
continue
for group in menu.groups:
if group.id in user_groups:
result.append(menu.id)
break
if count:
return len(result)
if query_string:
return (','.join(['%d' for x in result]), result)
return result
UIMenu()
+22 -2
View File
@@ -1471,6 +1471,12 @@ class ORM(object):
self._validate(cursor, user, ids)
# Restart rule cache
if self.pool.get('ir.rule.group').search(cursor, 0, [
('model.model', '=', self._name),
], context=context):
self.pool.get('ir.rule').domain_get()
if context.has_key('read_delta'):
del context['read_delta']
@@ -2069,8 +2075,22 @@ class ORM(object):
args[i][1], context=context)]
else:
res_ids = args[i][2]
if not len(res_ids):
args[i] = ('id', 'in', [0])
if res_ids == False:
cursor.execute('SELECT id ' \
'FROM "' + self._table + '" ' \
'WHERE id NOT IN ( ' \
'SELECT "' + field._id1 + '" ' \
'FROM "' + field._rel + '" ' \
')')
args[i] = ('id', 'in',
[x[0] for x in cursor.fetchall()])
elif res_ids == True:
cursor.execute('SELECT "' + field._id1 + '" ' \
'FROM "' + field._rel + '"')
args[i] = ('id', 'in',
[x[0] for x in cursor.fetchall()])
elif not res_ids:
args[i] = ('id', '=', '0')
else:
cursor.execute(
'SELECT "' + field._id1 + '" ' \
+16
View File
@@ -376,5 +376,21 @@
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
</record>
<record model="ir.rule.group" id="rule_group_menu">
<field name="model" search="[('model', '=', 'ir.ui.menu')]"/>
<field name="global" eval="True"/>
</record>
<record model="ir.rule" id="rule_menu1">
<field name="field" search="[('name', '=', 'groups'),('model.model', '=', 'ir.ui.menu')]"/>
<field name="operator">in</field>
<field name="operand">User/Groups</field>
<field name="rule_group" ref="rule_group_menu"/>
</record>
<record model="ir.rule" id="rule_menu2">
<field name="field" search="[('name', '=', 'groups'),('model.model', '=', 'ir.ui.menu')]"/>
<field name="operator">=</field>
<field name="operand">False</field>
<field name="rule_group" ref="rule_group_menu"/>
</record>
</data>
</tryton>