Use _table from Model for SQL queries

This commit is contained in:
Cédric Krier committed 2009-03-17 18:54:41 +01:00
1 parent 3e51c5c110
commit 4fe2554b2b
2 files changed
+30 -19

No files matched your search

+4 -2
View File
@@ -192,11 +192,13 @@ class ModelAccess(ModelSQL, ModelView):
return False
if user == 0:
return True
ir_model_obj = self.pool.get('ir.model')
user_group_obj = self.pool.get('res.user-res.group')
cursor.execute('SELECT MAX(CASE WHEN perm_'+mode+' THEN 1 else 0 END) '
'FROM ir_model_access a '
'JOIN ir_model m '
'JOIN "' + ir_model_obj._table + '" m '
'ON (a.model = m.id) '
'JOIN res_group_user_rel gu '
'JOIN "' + user_group_obj._table + '" gu '
'ON (gu.gid = a.group) '
'WHERE m.model = %s AND gu.uid = %s', (model_name, user,))
row = cursor.fetchall()
+26 -17
View File
@@ -136,17 +136,24 @@ class Rule(ModelSQL, ModelView):
return self.domain_get(cursor, context['user'], model_name,
context=ctx)
cursor.execute("SELECT r.id FROM ir_rule r " \
"JOIN (ir_rule_group g " \
"JOIN ir_model m ON (g.model = m.id)) " \
rule_group_obj = self.pool.get('ir.rule.group')
model_obj = self.pool.get('ir.model')
rule_group_user_obj = self.pool.get('ir.rule.group-res.user')
rule_group_group_obj = self.pool.get('ir.rule.group-res.group')
user_group_obj = self.pool.get('res.user-res.group')
cursor.execute('SELECT r.id FROM "' + self._table + '" r ' \
'JOIN ("' + rule_group_obj._table + '" g ' \
'JOIN "' + model_obj._table + '" m ON (g.model = m.id)) ' \
"ON (g.id = r.rule_group) " \
"WHERE m.model = %s "
"AND (g.id IN (" \
"SELECT rule_group_id FROM user_rule_group_rel " \
'SELECT rule_group_id ' \
'FROM "' + rule_group_user_obj._table + '" ' \
"WHERE user_id = %s " \
"UNION SELECT rule_group_id " \
"FROM group_rule_group_rel g_rel " \
"JOIN res_group_user_rel u_rel " \
'FROM "' + rule_group_group_obj._table + '" g_rel ' \
'JOIN "' + user_group_obj._table + '" u_rel ' \
"ON (g_rel.group_id = u_rel.gid) " \
"WHERE u_rel.uid = %s) " \
"OR default_p " \
@@ -178,17 +185,19 @@ class Rule(ModelSQL, ModelView):
val = []
# Test if there is no rule_group that have no rule
cursor.execute("""SELECT g.id FROM
ir_rule_group g
JOIN ir_model m ON (g.model = m.id)
WHERE m.model = %s
AND (g.id NOT IN (SELECT rule_group FROM ir_rule))
AND (g.id IN (SELECT rule_group_id FROM user_rule_group_rel
WHERE user_id = %s
UNION SELECT rule_group_id FROM group_rule_group_rel g_rel
JOIN res_group_user_rel u_rel
ON g_rel.group_id = u_rel.gid
WHERE u_rel.uid = %s))""", (model_name, user, user))
cursor.execute('SELECT g.id FROM "' + rule_group_obj._table + '" g ' \
'JOIN "' + model_obj._table + '" m ON (g.model = m.id) ' \
'WHERE m.model = %s ' \
'AND (g.id NOT IN (SELECT rule_group ' \
'FROM "' + self._table + '")) ' \
'AND (g.id IN (SELECT rule_group_id ' \
'FROM "' + rule_group_user_obj._table + '" ' \
'WHERE user_id = %s ' \
'UNION SELECT rule_group_id ' \
'FROM "' + rule_group_group_obj._table + '" g_rel ' \
'JOIN "' + user_group_obj._table + '" u_rel ' \
'ON g_rel.group_id = u_rel.gid ' \
'WHERE u_rel.uid = %s))', (model_name, user, user))
if cursor.rowcount:
group_id = cursor.fetchone()[0]
clause[group_id] = []