remove any_ from has_permissions

we branch on any_ to either say "require ALL these permissions" or
"require ANY of these permissions". But we only ever call the decorator
with one permission, or with any_=True, so it's unnecessary
This commit is contained in:
Leo Hemsted
2018-03-01 10:37:55 +00:00
parent 4a08cf81e7
commit 3afc193624
8 changed files with 12 additions and 18 deletions

View File

@@ -159,7 +159,7 @@ def send_messages(service_id, template_id):
@main.route("/services/<service_id>/send/<template_id>.csv", methods=['GET'])
@login_required
@user_has_permissions('send_messages', 'manage_templates', any_=True)
@user_has_permissions('send_messages', 'manage_templates')
def get_example_csv(service_id, template_id):
template = get_template(
service_api_client.get_service_template(service_id, template_id)['data'], current_service

View File

@@ -53,7 +53,7 @@ from app.utils import (
@main.route("/services/<service_id>/service-settings")
@login_required
@user_has_permissions('manage_service', 'manage_api_keys', any_=True)
@user_has_permissions('manage_service', 'manage_api_keys')
def service_settings(service_id):
letter_branding_organisations = email_branding_client.get_letter_email_branding()
organisation = organisations_client.get_service_organisation(service_id).get('name', None)
@@ -360,7 +360,7 @@ def service_set_reply_to_email(service_id):
@main.route("/services/<service_id>/service-settings/email-reply-to", methods=['GET'])
@login_required
@user_has_permissions('manage_service', 'manage_api_keys', any_=True)
@user_has_permissions('manage_service', 'manage_api_keys')
def service_email_reply_to(service_id):
reply_to_email_addresses = service_api_client.get_reply_to_email_addresses(service_id)
return render_template(
@@ -540,7 +540,7 @@ def service_set_auth_type(service_id):
@main.route("/services/<service_id>/service-settings/letter-contacts", methods=['GET'])
@login_required
@user_has_permissions('manage_service', 'manage_api_keys', any_=True)
@user_has_permissions('manage_service', 'manage_api_keys')
def service_letter_contact_details(service_id):
letter_contact_details = service_api_client.get_letter_contacts(service_id)
return render_template(
@@ -596,7 +596,7 @@ def service_edit_letter_contact(service_id, letter_contact_id):
@main.route("/services/<service_id>/service-settings/sms-sender", methods=['GET'])
@login_required
@user_has_permissions('manage_service', 'manage_api_keys', any_=True)
@user_has_permissions('manage_service', 'manage_api_keys')
def service_sms_senders(service_id):
def attach_hint(sender):

View File

@@ -159,7 +159,7 @@ class User(UserMixin):
def permissions(self, permissions):
raise AttributeError("Read only property")
def has_permissions(self, *permissions, any_=False, restrict_admin_usage=False):
def has_permissions(self, *permissions, restrict_admin_usage=False):
unknown_permissions = set(permissions) - all_permissions
if unknown_permissions:
@@ -172,12 +172,7 @@ class User(UserMixin):
# Service id is always set on the request for service specific views.
service_id = _get_service_id_from_view_args()
if service_id in self._permissions:
if any_:
has_permissions = any(x in self._permissions[service_id] for x in permissions)
else:
has_permissions = set(self._permissions[service_id]) >= set(permissions)
return has_permissions
return any(x in self._permissions[service_id] for x in permissions)
return False
def has_permission_for_service(self, service_id, permission):

View File

@@ -107,7 +107,7 @@
{% macro edit_field(text, link, permissions=[]) -%}
{% call field(align='right') %}
{% if current_user.has_permissions(*permissions, **{'any_': True}) or not permissions %}
{% if current_user.has_permissions(*permissions) or not permissions %}
<a href="{{ link }}">{{ text }}</a>
{% endif %}
{% endcall %}

View File

@@ -51,7 +51,7 @@
{% if current_user.has_permissions('manage_service') %}
<li><a href="{{ url_for('.usage', service_id=current_service.id) }}">Usage</a></li>
{% endif %}
{% if current_user.has_permissions('manage_api_keys', 'manage_service', any_=True) %}
{% if current_user.has_permissions('manage_api_keys', 'manage_service') %}
<li><a href="{{ url_for('.service_settings', service_id=current_service.id) }}">Settings</a></li>
{% endif %}
{% if current_user.has_permissions('manage_api_keys') %}

View File

@@ -19,7 +19,7 @@
{% if not templates %}
{% include 'views/dashboard/write-first-messages.html' %}
{% endif %}
{% elif not current_user.has_permissions('send_messages', 'manage_api_keys', any_=True) %}
{% elif not current_user.has_permissions('send_messages', 'manage_api_keys') %}
{% include 'views/dashboard/no-permissions-banner.html' %}
{% endif %}

View File

@@ -70,8 +70,7 @@ def test_user_has_permissions_or(
client,
user,
['send_messages', 'manage_service'],
True,
kwargs={'any_': True})
True)
def test_user_has_permissions_multiple(

View File

@@ -1931,7 +1931,7 @@ def mock_no_inbound_number_for_service(mocker):
@pytest.fixture(scope='function')
def mock_has_permissions(mocker):
def _has_permission(*permissions, any_=False, restrict_admin_usage=False):
def _has_permission(*permissions, restrict_admin_usage=False):
return True
return mocker.patch(