summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-12-13 19:03:38 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-12-13 19:03:38 +0100
commit8013cdaddc1c9b87c843a9ca857caba9d1fd20f2 (patch)
tree53bbd0940385c35842abb86b331e477b0de1356e
parent651985660e22e3569d450ebe3cfda9f55d54fbbf (diff)
downloadIshtar-8013cdaddc1c9b87c843a9ca857caba9d1fd20f2.tar.bz2
Ishtar-8013cdaddc1c9b87c843a9ca857caba9d1fd20f2.zip
Fix rights for finds and contextrecords
-rw-r--r--archaeological_context_records/models.py7
-rw-r--r--archaeological_finds/ishtar_menu.py24
-rw-r--r--archaeological_finds/models.py10
-rw-r--r--archaeological_operations/ishtar_menu.py18
-rw-r--r--ishtar_common/backend.py4
-rw-r--r--ishtar_common/models.py1
6 files changed, 38 insertions, 26 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index eb62029aa..85f7582f3 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -20,6 +20,7 @@
from django.conf import settings
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse
+from django.db.models import Q
from django.db.models.signals import post_delete
from django.utils.translation import ugettext_lazy as _, ugettext, pgettext
@@ -201,6 +202,12 @@ class ContextRecord(BaseHistorizedItem, OwnPerms, ShortMenuItem):
def show_url(self):
return reverse('show-contextrecord', args=[self.pk, ''])
+ @classmethod
+ def get_query_owns(cls, user):
+ return Q(operation__scientist=user.ishtaruser.person) |\
+ Q(operation__in_charge=user.ishtaruser.person) |\
+ Q(history_creator=user)
+
def full_label(self):
if not self.operation:
return unicode(self)
diff --git a/archaeological_finds/ishtar_menu.py b/archaeological_finds/ishtar_menu.py
index ae684397c..8034d96e7 100644
--- a/archaeological_finds/ishtar_menu.py
+++ b/archaeological_finds/ishtar_menu.py
@@ -31,18 +31,18 @@ MENU_SECTIONS = [
MenuItem(
'find_search', _(u"Search"),
model=models.Find,
- access_controls=['view_item',
- 'view_own_item']),
+ access_controls=['view_find',
+ 'view_own_find']),
MenuItem(
'find_creation', _(u"Creation"),
model=models.Find,
- access_controls=['add_item',
- 'add_own_item']),
+ access_controls=['add_find',
+ 'add_own_find']),
MenuItem(
'find_modification', _(u"Modification"),
model=models.Find,
- access_controls=['change_item',
- 'change_own_item']),
+ access_controls=['change_find',
+ 'change_own_find']),
# MenuItem('treatment_creation', _(u"Add a treatment"),
# model=models.Treatment,
# access_controls=['add_treatment',
@@ -53,18 +53,18 @@ MENU_SECTIONS = [
MenuItem('find_source_creation',
_(u"Creation"),
model=models.FindSource,
- access_controls=['change_item',
- 'change_own_item']),
+ access_controls=['change_find',
+ 'change_own_find']),
MenuItem('find_source_modification',
_(u"Modification"),
model=models.FindSource,
- access_controls=['change_item',
- 'change_own_item']),
+ access_controls=['change_find',
+ 'change_own_find']),
MenuItem('find_source_deletion',
_(u"Deletion"),
model=models.FindSource,
- access_controls=['change_item',
- 'change_own_item']),
+ access_controls=['change_find',
+ 'change_own_find']),
])
]))
]
diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py
index e4a247941..32b4334ff 100644
--- a/archaeological_finds/models.py
+++ b/archaeological_finds/models.py
@@ -22,7 +22,7 @@ import datetime
from django.conf import settings
from django.contrib.gis.db import models
from django.core.urlresolvers import reverse
-from django.db.models import Max
+from django.db.models import Max, Q
from django.utils.translation import ugettext_lazy as _, ugettext
from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \
@@ -479,6 +479,14 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):
new.base_finds.add(base_find)
return new
+ @classmethod
+ def get_query_owns(cls, user):
+ return Q(base_finds__context_record__operation__scientist=user.
+ ishtaruser.person) |\
+ Q(base_finds__context_record__operation__in_charge=user.
+ ishtaruser.person) |\
+ Q(history_creator=user)
+
def save(self, *args, **kwargs):
super(Find, self).save(*args, **kwargs)
q = self.base_finds
diff --git a/archaeological_operations/ishtar_menu.py b/archaeological_operations/ishtar_menu.py
index 8c9fbbbc3..2fffa5947 100644
--- a/archaeological_operations/ishtar_menu.py
+++ b/archaeological_operations/ishtar_menu.py
@@ -121,32 +121,28 @@ if FILES_AVAILABLE:
MenuItem(
'operation_administrativeactop_search',
_(u"Search"),
- model=models.Operation,
+ model=models.AdministrativeAct,
access_controls=[
- 'change_operation', 'change_own_operation']),
+ 'change_administrativeact']),
MenuItem(
'operation_administrativeactop',
_(u"Add"),
- model=models.Operation,
- access_controls=['change_operation',
- 'change_own_operation']),
+ model=models.AdministrativeAct,
+ access_controls=['change_administrativeact']),
MenuItem(
'operation_administrativeactop_modification',
_(u"Modification"),
model=models.AdministrativeAct,
- access_controls=['change_operation',
- 'change_own_operation']),
+ access_controls=['change_administrativeact']),
MenuItem(
'operation_administrativeactop_deletion',
_(u"Deletion"),
model=models.AdministrativeAct,
- access_controls=[
- 'operation_deletion', 'delete_own_operation']),
+ access_controls=['change_administrativeact']),
MenuItem(
'operation_administrativeact_document',
_(u"Documents"),
model=models.AdministrativeAct,
- access_controls=['change_operation',
- 'change_own_operation']),
+ access_controls=['change_administrativeact']),
],)
)
diff --git a/ishtar_common/backend.py b/ishtar_common/backend.py
index 0febd61b2..f48e6ddec 100644
--- a/ishtar_common/backend.py
+++ b/ishtar_common/backend.py
@@ -53,11 +53,11 @@ class ObjectPermBackend(ModelBackend):
if not main_right or not is_ownperm:
return main_right
if obj is None:
- model_name = perm.split('_')[-1].capitalize()
+ model_name = perm.split('_')[-1].lower()
model = None
for app in cache.get_apps():
for modl in cache.get_models(app):
- if modl.__name__ == model_name:
+ if modl.__name__.lower() == model_name:
model = modl
if not model:
return False
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 48218ba94..c4dcd4c44 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -1982,6 +1982,7 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
res = cache.get(cache_key)
if res in (True, False):
return res
+
if type(right_name) in (list, tuple):
res = bool(self.person_types.filter(
txt_idx__in=right_name).count()) or \