diff options
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 |
commit | 7d96480112b1a2537137ee46107612dd74a437cf (patch) | |
tree | 53bbd0940385c35842abb86b331e477b0de1356e | |
parent | 61b3f51bb734d68b4c14a87a49abbaa6ad89b105 (diff) | |
download | Ishtar-7d96480112b1a2537137ee46107612dd74a437cf.tar.bz2 Ishtar-7d96480112b1a2537137ee46107612dd74a437cf.zip |
Fix rights for finds and contextrecords
-rw-r--r-- | archaeological_context_records/models.py | 7 | ||||
-rw-r--r-- | archaeological_finds/ishtar_menu.py | 24 | ||||
-rw-r--r-- | archaeological_finds/models.py | 10 | ||||
-rw-r--r-- | archaeological_operations/ishtar_menu.py | 18 | ||||
-rw-r--r-- | ishtar_common/backend.py | 4 | ||||
-rw-r--r-- | ishtar_common/models.py | 1 |
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 \ |