Commit 0665d0ef authored by Weblate's avatar Weblate

Merge remote-tracking branch 'origin/master'

parents f546d80b 5c666bf0
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
{% can_see_repository_status user object as user_can_see_repository_status %} {% can_see_repository_status user object as user_can_see_repository_status %}
{% can_commit_translation user object as user_can_commit_translation %} {% can_commit_translation user object as user_can_commit_translation %}
{% can_manage_acl user object as user_can_manage_acl %}
<ul class="nav nav-pills"> <ul class="nav nav-pills">
<li class="active"><a href="#overview" data-toggle="tab">{% trans "Overview" %}</a></li> <li class="active"><a href="#overview" data-toggle="tab">{% trans "Overview" %}</a></li>
...@@ -35,7 +36,7 @@ ...@@ -35,7 +36,7 @@
{% endif %} {% endif %}
<li><a href="{% url 'checks' %}?project={{ object.slug }}">{% trans "Failing checks" %}</a></li> <li><a href="{% url 'checks' %}?project={{ object.slug }}">{% trans "Failing checks" %}</a></li>
<li><a href="{% url 'checks' %}?project={{ object.slug }}&amp;ignored=true">{% trans "Ignored checks" %}</a></li> <li><a href="{% url 'checks' %}?project={{ object.slug }}&amp;ignored=true">{% trans "Ignored checks" %}</a></li>
{% if perms.trans.manage_acl and object.enable_acl %} {% if user_can_manage_acl %}
<li><a href="#acl" data-toggle="tab">{% trans "Manage users" %}</a></li> <li><a href="#acl" data-toggle="tab">{% trans "Manage users" %}</a></li>
{% endif %} {% endif %}
</ul> </ul>
...@@ -145,7 +146,7 @@ ...@@ -145,7 +146,7 @@
</div> </div>
{% endif %} {% endif %}
{% if perms.trans.manage_acl and object.enable_acl %} {% if user_can_manage_acl %}
<div class="tab-pane" id="acl"> <div class="tab-pane" id="acl">
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
......
...@@ -232,7 +232,7 @@ def can_edit_priority(user, project): ...@@ -232,7 +232,7 @@ def can_edit_priority(user, project):
@cache_permission @cache_permission
def can_ignore_check(user, project): def can_ignore_check(user, project):
""" """
Checks whether user can edit translation priority. Checks whether user can ignore check.
""" """
return check_permission(user, project, 'trans.ignore_check') return check_permission(user, project, 'trans.ignore_check')
...@@ -240,6 +240,17 @@ def can_ignore_check(user, project): ...@@ -240,6 +240,17 @@ def can_ignore_check(user, project):
@cache_permission @cache_permission
def can_delete_comment(user, project): def can_delete_comment(user, project):
""" """
Checks whether user can edit translation priority. Checks whether user can delete comment on given project.
""" """
return check_permission(user, project, 'trans.delete_comment') return check_permission(user, project, 'trans.delete_comment')
@cache_permission
def can_manage_acl(user, project):
"""
Checks whether user can manage ACL on given project.
"""
if not project.enable_acl:
return False
return check_permission(user, project, 'trans.manage_acl')
...@@ -111,3 +111,8 @@ def can_ignore_check(user, project): ...@@ -111,3 +111,8 @@ def can_ignore_check(user, project):
@register.assignment_tag @register.assignment_tag
def can_delete_comment(user, project): def can_delete_comment(user, project):
return weblate.trans.permissions.can_delete_comment(user, project) return weblate.trans.permissions.can_delete_comment(user, project)
@register.assignment_tag
def can_manage_acl(user, project):
return weblate.trans.permissions.can_manage_acl(user, project)
...@@ -19,27 +19,30 @@ ...@@ -19,27 +19,30 @@
# #
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import login_required
from django.db.models import Q from django.db.models import Q
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib import messages from django.contrib import messages
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST
from django.core.exceptions import PermissionDenied
from weblate.trans.util import redirect_param from weblate.trans.util import redirect_param
from weblate.trans.forms import AddUserForm from weblate.trans.forms import AddUserForm
from weblate.trans.views.helper import get_project from weblate.trans.views.helper import get_project
from weblate.trans.permissions import can_manage_acl
@require_POST @require_POST
@permission_required('trans.manage_acl') @login_required
def add_user(request, project): def add_user(request, project):
obj = get_project(request, project) obj = get_project(request, project)
if not can_manage_acl(request.user, obj):
raise PermissionDenied()
form = AddUserForm(request.POST) form = AddUserForm(request.POST)
if not obj.enable_acl: if form.is_valid():
messages.error(request, _('ACL not enabled for this project!'))
elif form.is_valid():
try: try:
user = User.objects.get( user = User.objects.get(
Q(username=form.cleaned_data['name']) | Q(username=form.cleaned_data['name']) |
...@@ -64,10 +67,13 @@ def add_user(request, project): ...@@ -64,10 +67,13 @@ def add_user(request, project):
@require_POST @require_POST
@permission_required('trans.manage_acl') @login_required
def delete_user(request, project): def delete_user(request, project):
obj = get_project(request, project) obj = get_project(request, project)
if not can_manage_acl(request.user, obj):
raise PermissionDenied()
form = AddUserForm(request.POST) form = AddUserForm(request.POST)
if form.is_valid(): if form.is_valid():
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment