diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-04 16:20:11 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 17:30:46 +0100 |
commit | a87eb643c09fb8af86c0b7198cccd097eef1aac6 (patch) | |
tree | 4724ae36d28c7e7dd492afaaca9442102861f1e8 /ishtar_common | |
parent | 4dd953b8327d684107b6485cef2fb69cd7663603 (diff) | |
download | Ishtar-a87eb643c09fb8af86c0b7198cccd097eef1aac6.tar.bz2 Ishtar-a87eb643c09fb8af86c0b7198cccd097eef1aac6.zip |
Sheet: only display window link when permissions are OK
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/forms_common.py | 4 | ||||
-rw-r--r-- | ishtar_common/models.py | 20 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/blocks/sheet_creation_section.html | 4 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/import_step_by_step.html | 4 | ||||
-rw-r--r-- | ishtar_common/templatetags/link_to_window.py | 20 | ||||
-rw-r--r-- | ishtar_common/templatetags/window_field.py | 22 | ||||
-rw-r--r-- | ishtar_common/views.py | 4 |
7 files changed, 53 insertions, 25 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 1cbaecb92..b461d6266 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -40,7 +40,7 @@ from django.utils.translation import ugettext_lazy as _, pgettext import models import widgets from bootstrap_datepicker.widgets import DatePicker -from ishtar_common.templatetags.link_to_window import link_to_window +from ishtar_common.templatetags.link_to_window import simple_link_to_window from forms import FinalForm, FormSet, reverse_lazy, name_validator, \ TableSelect, ManageOldType, CustomForm, FieldType, FormHeader, \ FormSetWithDeleteSwitches, IshtarForm, get_data_from_formset @@ -414,7 +414,7 @@ class MergeIntoForm(forms.Form): except self.associated_model.DoesNotExist: continue self.fields['main_item'].choices.append( - (item.pk, mark_safe(u"{} {}".format(link_to_window(item), + (item.pk, mark_safe(u"{} {}".format(simple_link_to_window(item), unicode(item))))) def merge(self): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 2915c4997..319f19539 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -238,21 +238,29 @@ class OwnPerms(object): """ return None # implement for each object + def can_view(self, request): + if hasattr(self, "LONG_SLUG"): + perm = "view_" + self.LONG_SLUG + else: + perm = "view_" + self.SLUG + return self.can_do(request, perm) + def can_do(self, request, action_name): """ Check permission availability for the current object. :param request: request object - :param action_name: action name eg: "change_find" - "own" declinaison is + :param action_name: action name eg: "change_find" - "own" variation is checked :return: boolean """ + if not getattr(request.user, 'ishtaruser', None): + return False splited = action_name.split('_') action_own_name = splited[0] + '_own_' + '_'.join(splited[1:]) - return request.user.ishtaruser.has_right( - action_name, request.session) or \ - (request.user.ishtaruser.has_right( - action_own_name, request.session) - and self.is_own(request.user.ishtaruser)) + user = request.user + return user.ishtaruser.has_right(action_name, request.session) or \ + (user.ishtaruser.has_right(action_own_name, request.session) + and self.is_own(user.ishtaruser)) def is_own(self, user, alt_query_own=None): """ diff --git a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html index 6247920cd..d3a49ecc9 100644 --- a/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html +++ b/ishtar_common/templates/ishtar/blocks/sheet_creation_section.html @@ -1,7 +1,7 @@ {% load i18n link_to_window %} {% if item.history_creator.ishtaruser.person %} <div class="col-12 col-md-6 col-lg-3 flex-wrap"> - <dt>{% trans "Creation" context "Sheet" %}{{item.history_creator.ishtaruser.person|link_to_window}}</dt> + <dt>{% trans "Creation" context "Sheet" %}{{item.history_creator.ishtaruser.person|link_to_window:request}}</dt> <dd> {{item.history_creator.ishtaruser.person}}<br/> <small class="text-muted">{{item.history_creation_date|date:"DATETIME_FORMAT"}}</small> @@ -10,7 +10,7 @@ {% endif %} {% if item.history_creation_date != item.last_edition_date %} <div class="col-12 col-md-6 col-lg-3 flex-wrap"> - <dt>{% trans "Modification" context "Sheet" %}{{item.history_modifier.ishtaruser.person|link_to_window}}</dt> + <dt>{% trans "Modification" context "Sheet" %}{{item.history_modifier.ishtaruser.person|link_to_window:request}}</dt> <dd> {{item.history_modifier.ishtaruser.person}}<br/> <small class="text-muted">{% firstof item.history_date|date:"DATETIME_FORMAT" item.history.all.0.history_date|date:"DATETIME_FORMAT" %}</small> diff --git a/ishtar_common/templates/ishtar/import_step_by_step.html b/ishtar_common/templates/ishtar/import_step_by_step.html index 998bf99c6..4b791b98f 100644 --- a/ishtar_common/templates/ishtar/import_step_by_step.html +++ b/ishtar_common/templates/ishtar/import_step_by_step.html @@ -189,7 +189,7 @@ <div class="card"> <div class="card-body"> - <h5 class="card-title">{{path}} – {{obj}} {{obj|link_to_window}} ({{obj.get_verbose_name}})</h5> + <h5 class="card-title">{{path}} – {{obj}} {{obj|simple_link_to_window}} ({{obj.get_verbose_name}})</h5> </div> <div class="card-body"> @@ -235,7 +235,7 @@ <div class="card"> <div class="card-body"> - <h5 class="card-title">{{path}} – {{obj}} {{obj|link_to_window}} ({{obj.get_verbose_name}})</h5> + <h5 class="card-title">{{path}} – {{obj}} {{obj|simple_link_to_window}} ({{obj.get_verbose_name}})</h5> </div> <div class="card-body"> diff --git a/ishtar_common/templatetags/link_to_window.py b/ishtar_common/templatetags/link_to_window.py index fca5a9f91..892492895 100644 --- a/ishtar_common/templatetags/link_to_window.py +++ b/ishtar_common/templatetags/link_to_window.py @@ -9,7 +9,7 @@ register = Library() @register.filter -def link_to_window(item): +def simple_link_to_window(item): if not hasattr(item, 'SHOW_URL'): return "" return mark_safe( @@ -20,6 +20,22 @@ def link_to_window(item): @register.filter +def link_to_window(item, context): + if not hasattr(item, 'can_view'): # no permission check + return simple_link_to_window(item) + if hasattr(context, "request"): # WSGIRequest + request = context.request + elif "request" in context: # RequestContext + request = context['request'] + else: + return u"" + if not item.can_view(request): + print(item, "NOK3") + return u"" + return simple_link_to_window(item) + + +@register.filter def link_to_odt(item): return reverse(item.SHOW_URL, args=[item.pk, 'odt']) @@ -52,7 +68,7 @@ def add_links(items, extra_attr=''): lbl = item.fancy_str() else: lbl = unicode(item) - html.append(u"{} {}".format(lbl, link_to_window(item_lnk))) + html.append(u"{} {}".format(lbl, simple_link_to_window(item_lnk))) return mark_safe(u"<br/>".join(html)) diff --git a/ishtar_common/templatetags/window_field.py b/ishtar_common/templatetags/window_field.py index 30a711ed9..3af9ed634 100644 --- a/ishtar_common/templatetags/window_field.py +++ b/ishtar_common/templatetags/window_field.py @@ -145,20 +145,24 @@ def field_flex_multiple_full(caption, data, small=False): return field_multiple(caption, data, size=size) -@register.inclusion_tag('ishtar/blocks/window_field_detail.html') -def field_detail(caption, item, li=False, size=None): - return {'caption': caption, 'item': item, 'link': link_to_window(item), +@register.inclusion_tag('ishtar/blocks/window_field_detail.html', + takes_context=True) +def field_detail(context, caption, item, li=False, size=None): + return {'caption': caption, 'item': item, + 'link': link_to_window(item, context), 'li': li, 'size': size} -@register.inclusion_tag('ishtar/blocks/window_field_detail.html') -def field_li_detail(caption, item): - return field_detail(caption, item, li=True) +@register.inclusion_tag('ishtar/blocks/window_field_detail.html', + takes_context=True) +def field_li_detail(context, caption, item): + return field_detail(context, caption, item, li=True) -@register.inclusion_tag('ishtar/blocks/window_field_flex_detail.html') -def field_flex_detail(caption, item, small=False): +@register.inclusion_tag('ishtar/blocks/window_field_flex_detail.html', + takes_context=True) +def field_flex_detail(context, caption, item, small=False): size = None if small: size = 2 - return field_detail(caption, item, size=size) + return field_detail(context, caption, item, size=size) diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 710feb8c6..8b2602dbc 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -58,7 +58,7 @@ from ishtar_common import forms_common as forms from ishtar_common import wizards from ishtar_common.forms import FinalForm, FinalDeleteForm from ishtar_common.models import get_current_profile -from ishtar_common.templatetags.link_to_window import link_to_window +from ishtar_common.templatetags.link_to_window import simple_link_to_window from ishtar_common.utils import clean_session_cache, CSV_OPTIONS, \ get_field_labels_from_path, get_random_item_image_link, shortify from ishtar_common.widgets import JQueryAutoComplete @@ -1457,7 +1457,7 @@ class ImportStepByStepView(IshtarMixin, LoginRequiredMixin, TemplateView): def get_value(self, item): if hasattr(item, 'SHOW_URL'): - return u"{}{}".format(unicode(item), link_to_window(item)) + return u"{}{}".format(unicode(item), simple_link_to_window(item)) if hasattr(item, 'explicit_label'): return item.explicit_label if item in (None, [], [None]): |