summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2014-01-13 11:10:49 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2014-01-13 11:10:49 +0100
commit8de9d4ee352f02c46c41c13d70b7a80fed80b27e (patch)
tree59374994acc59a3ed53ce1c9aa23745d8c7a503e /ishtar_common/views.py
parent819a2efeff00d8f09712938b7d2b6110cb7f24aa (diff)
downloadIshtar-8de9d4ee352f02c46c41c13d70b7a80fed80b27e.tar.bz2
Ishtar-8de9d4ee352f02c46c41c13d70b7a80fed80b27e.zip
Work on new right
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 7963dc46a..e02ed3f8b 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -188,11 +188,25 @@ HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_type',
PRIVATE_FIELDS = ('id', 'history_modifier', 'order')
def get_item(model, func_name, default_name, extra_request_keys=[],
base_request={}, bool_fields=[], reversed_bool_fields=[],
- dated_fields=[], associated_models=[], relative_session_names={}):
+ dated_fields=[], associated_models=[], relative_session_names={},
+ specific_perms=[]):
"""
Generic treatment of tables
"""
def func(request, data_type='json', full=False, **dct):
+ # check rights
+ own = True # more restrictive by default
+ allowed = False
+ for perm, lbl in model._meta.permissions:
+ # if not specific any perm is relevant (read right)
+ if specific_perms and perm not in specific_perms:
+ continue
+ if request.user.has_perm(perm):
+ allowed = True
+ if "_own_" not in perm:
+ own = False
+ if not allowed:
+ return HttpResponse(None, mimetype='text/plain')
if 'type' in dct:
data_type = dct.pop('type')
if not data_type:
@@ -288,6 +302,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
and_reqs.append(reqs)
break
query = Q(**dct)
+ if own:
+ query = query & model.get_query_own(request.user)
for k, or_req in or_reqs:
alt_dct = dct.copy()
alt_dct.pop(k)