SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit d98664bc authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Use django in-built permissions instead of rank; basic groups defined

parent 57b4b1e7
No related branches found
No related tags found
No related merge requests found
...@@ -53,6 +53,8 @@ def vet_submitted_comment_ack(request, comment_id): ...@@ -53,6 +53,8 @@ def vet_submitted_comment_ack(request, comment_id):
elif form.cleaned_data['action_option'] == '2': elif form.cleaned_data['action_option'] == '2':
# the comment request is simply rejected # the comment request is simply rejected
comment.status = int(form.cleaned_data['refusal_reason']) comment.status = int(form.cleaned_data['refusal_reason'])
if comment.status == 0:
comment.status == -1
comment.save() comment.save()
email_text = ('Dear ' + title_dict[comment.author.title] + ' ' + comment.author.user.last_name + email_text = ('Dear ' + title_dict[comment.author.title] + ' ' + comment.author.user.last_name +
', \n\nThe Comment you have submitted, concerning publication with title ') ', \n\nThe Comment you have submitted, concerning publication with title ')
......
from django.utils import timezone from django.utils import timezone
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User, Group
from django_countries.fields import CountryField from django_countries.fields import CountryField
...@@ -64,6 +64,17 @@ class Contributor(models.Model): ...@@ -64,6 +64,17 @@ class Contributor(models.Model):
personalwebpage = models.URLField(verbose_name='personal web page', blank=True) personalwebpage = models.URLField(verbose_name='personal web page', blank=True)
vetted_by = models.OneToOneField('self', blank=True, null=True) vetted_by = models.OneToOneField('self', blank=True, null=True)
class Meta:
permissions = (
('can_manage_registration_invitations', 'Can manage registration invitations'),
('can_vet_registration_requests', 'Can vet registration requests'),
('can_vet_commentary_requests', 'Can vet Commentary page requests'),
('can_vet_thesislink_requests', 'Can vet Thesis Link requests'),
('can_vet_authorship_claims', 'Can vet Authorship claims'),
('can_vet_comments', 'Can vet submitted comments'),
('can_process_incoming_submissions', 'Can process incoming Submissions'),
('can_vet_submitted_reports', 'Can vet submitted Reports'),
)
def __str__ (self): def __str__ (self):
return self.user.last_name + ', ' + self.user.first_name return self.user.last_name + ', ' + self.user.first_name
...@@ -95,6 +106,24 @@ class Contributor(models.Model): ...@@ -95,6 +106,24 @@ class Contributor(models.Model):
return output return output
##################
#### Groups ######
##################
SciPostAdmin, created = Group.objects.get_or_create(name='SciPost Administrators')
AdvisoryBoard, created = Group.objects.get_or_create(name='Advisory Board')
EditorialCollege, created = Group.objects.get_or_create(name='Editorial College')
VettingEditors, created = Group.objects.get_or_create(name='Vetting Editors')
RegisteredContributors, created = Group.objects.get_or_create(name='Registered Contributors')
INVITATION_TYPE = ( INVITATION_TYPE = (
('F', 'Editorial Fellow'), ('F', 'Editorial Fellow'),
('C', 'Contributor'), ('C', 'Contributor'),
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
{% block headsup %} {% block headsup %}
{% load scipost_extras %}
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
$("#mysubmissionsbutton").click(function(){ $("#mysubmissionsbutton").click(function(){
...@@ -28,9 +30,18 @@ ...@@ -28,9 +30,18 @@
{% block bodysup %} {% block bodysup %}
{% if not request.user|is_in_group:'Registered Contributors' %}
<section>
<hr class="hr12">
<h3>Your credentials will soon be verified by an Editor.</h3>
<p>If accepted, you will become a registered Contributor, enabling you to submit, comment and vote.</p>
</section>
{% else %}
<section> <section>
<div class="flex-greybox"> <div class="flex-greybox">
<h1>Welcome to your SciPost Personal Page, {{ user.username }} (rank {{ contributor.rank }} Contributor)</h1> <h1>Welcome to your SciPost Personal Page, {{ user.username }} </h1>
</div> </div>
<hr class="hr12"> <hr class="hr12">
...@@ -43,6 +54,22 @@ ...@@ -43,6 +54,22 @@
{{ contributor.private_info_as_table|safe }} {{ contributor.private_info_as_table|safe }}
</div> </div>
<div class="col-6"> <div class="col-6">
{% if request.user|is_in_group:'SciPost Administrators' %}
<h3>You are a SciPost Administrator.</h3>
{% endif %}
{% if request.user|is_in_group:'Advisory Board' %}
<h3>You are a member of the Advisory Board.</h3>
{% endif %}
{% if request.user|is_in_group:'Editorial College' %}
<h3>You are a member of the Editorial College.</h3>
{% endif %}
{% if request.user|is_in_group:'Vetting Editors' %}
<h3>You are a SciPost Vetting Editor.</h3>
{% endif %}
{% if request.user|is_in_group:'Registered Contributors' %}
<h3>You are a Registered Contributor.</h3>
{% endif %}
<br/>
<h3>Update your personal data or password</h3> <h3>Update your personal data or password</h3>
<ul> <ul>
<li><a href="{% url 'scipost:update_personal_data' %}">Update your personal data</a></li> <li><a href="{% url 'scipost:update_personal_data' %}">Update your personal data</a></li>
...@@ -52,7 +79,7 @@ ...@@ -52,7 +79,7 @@
</div> </div>
</section> </section>
{% if contributor.rank >= 2 %} {% if request.user|is_in_group:'Vetting Editors' %}
<section> <section>
<hr class="hr12"> <hr class="hr12">
<div class="flex-greybox"> <div class="flex-greybox">
...@@ -60,13 +87,13 @@ ...@@ -60,13 +87,13 @@
</div> </div>
<br> <br>
<div class="row"> <div class="row">
{% if contributor.rank >= 4 %} {% if request.user|is_in_group:'SciPost Administrators' %}
<div class="col-4"> <div class="col-4">
<h3>Registration actions</h3> <h3>Registration actions</h3>
<ul> <ul>
<li><a href="{% url 'scipost:vet_registration_requests' %}">Vet Registration requests</a> ({{ nr_reg_to_vet }})</li> <li><a href="{% url 'scipost:vet_registration_requests' %}">Vet Registration requests</a> ({{ nr_reg_to_vet }})</li>
<li>Awaiting validation ({{ nr_reg_awaiting_validation }}) (no action necessary)</li> <li>Awaiting validation ({{ nr_reg_awaiting_validation }}) (no action necessary)</li>
<li><a href="{% url 'scipost:registration_invitations' %}">Manage Registration Invitations</a></li> <li><a href="{% url 'scipost:registration_invitations' %}">Manage Registration Invitations</a></li>
</ul> </ul>
</div> </div>
{% endif %} {% endif %}
...@@ -81,13 +108,11 @@ ...@@ -81,13 +108,11 @@
<li><a href="{% url 'scipost:vet_authorship_claims' %}">Vet Authorship Claims</a> ({{ nr_authorship_claims_to_vet }})</li> <li><a href="{% url 'scipost:vet_authorship_claims' %}">Vet Authorship Claims</a> ({{ nr_authorship_claims_to_vet }})</li>
</ul> </ul>
</div> </div>
{% if contributor.rank >= 3 %} {% if request.user|is_in_group:'Editorial College' %}
<div class="col-4"> <div class="col-4">
<h3>Submissions processing</h3> <h3>Submissions processing</h3>
<ul> <ul>
{% if contributor.rank >= 4 %}
<li><a href="{% url 'submissions:process_new_submissions' %}">Process new SciPost Submissions</a> ({{ nr_submissions_to_process }})</li> <li><a href="{% url 'submissions:process_new_submissions' %}">Process new SciPost Submissions</a> ({{ nr_submissions_to_process }})</li>
{% endif %}
</ul> </ul>
</div> </div>
{% endif %} {% endif %}
...@@ -167,13 +192,6 @@ ...@@ -167,13 +192,6 @@
</div> </div>
</section> </section>
{% if contributor.rank == 0 %}
<section>
<hr class="hr12">
<p>Your credentials will soon be verified by an Editor. If accepted, your rank (currently 0: newly registered) will be set to 1 (normal user), enabling you to submit, comment and vote.</p>
</section>
{% endif %}
{% if own_comments %} {% if own_comments %}
<section> <section>
<hr class="hr12"> <hr class="hr12">
...@@ -208,4 +226,6 @@ ...@@ -208,4 +226,6 @@
</section> </section>
{% endif %} {% endif %}
{% endif %}
{% endblock bodysup %} {% endblock bodysup %}
from django import template
from django.contrib.auth.models import Group
register = template.Library()
@register.filter(name='is_in_group')
def is_in_group(user, group_name):
group = Group.objects.get(name=group_name)
return True if group in user.groups.all() else False
...@@ -6,7 +6,8 @@ import string ...@@ -6,7 +6,8 @@ import string
from django.utils import timezone from django.utils import timezone
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.contrib.auth import authenticate, login, logout from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User from django.contrib.auth.decorators import permission_required
from django.contrib.auth.models import User, Group, Permission
from django.contrib.auth.views import password_reset, password_reset_confirm from django.contrib.auth.views import password_reset, password_reset_confirm
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -33,6 +34,32 @@ from theses.models import ThesisLink ...@@ -33,6 +34,32 @@ from theses.models import ThesisLink
from theses.forms import ThesisLinkSearchForm from theses.forms import ThesisLinkSearchForm
################################
# Assign permissions to groups #
################################
# Registration
can_manage_registration_invitations = Permission.objects.get(codename='can_manage_registration_invitations')
can_vet_registration_requests = Permission.objects.get(codename='can_vet_registration_requests')
# Vetting of simple objects
can_vet_commentary_requests = Permission.objects.get(codename='can_vet_commentary_requests')
can_vet_thesislink_requests = Permission.objects.get(codename='can_vet_thesislink_requests')
can_vet_authorship_claims = Permission.objects.get(codename='can_vet_authorship_claims')
can_vet_comments = Permission.objects.get(codename='can_vet_comments')
# Submission handling
can_process_incoming_submissions = Permission.objects.get(codename='can_process_incoming_submissions')
can_vet_submitted_reports = Permission.objects.get(codename='can_vet_submitted_reports')
SciPostAdmin.permissions.add(can_manage_registration_invitations,
can_vet_registration_requests,
can_vet_commentary_requests, can_vet_thesislink_requests,
can_vet_authorship_claims, can_vet_comments,
)
VettingEditors.permissions.add(can_vet_commentary_requests, can_vet_thesislink_requests,
can_vet_authorship_claims, can_vet_comments,
)
############# #############
# Main view # Main view
############# #############
...@@ -135,7 +162,7 @@ def request_new_activation_link(request, oldkey): ...@@ -135,7 +162,7 @@ def request_new_activation_link(request, oldkey):
return render (request, 'scipost/request_new_activation_link_ack.html') return render (request, 'scipost/request_new_activation_link_ack.html')
@permission_required('scipost.can_vet_registration_requests')
def vet_registration_requests(request): def vet_registration_requests(request):
contributor = Contributor.objects.get(user=request.user) contributor = Contributor.objects.get(user=request.user)
#contributor_to_vet = Contributor.objects.filter(user__is_active=True, rank=0).first() # limit to one at a time #contributor_to_vet = Contributor.objects.filter(user__is_active=True, rank=0).first() # limit to one at a time
...@@ -145,7 +172,7 @@ def vet_registration_requests(request): ...@@ -145,7 +172,7 @@ def vet_registration_requests(request):
context = {'contributors_to_vet': contributors_to_vet, 'form': form } context = {'contributors_to_vet': contributors_to_vet, 'form': form }
return render(request, 'scipost/vet_registration_requests.html', context) return render(request, 'scipost/vet_registration_requests.html', context)
@permission_required('scipost.can_vet_registration_requests')
def vet_registration_request_ack(request, contributor_id): def vet_registration_request_ack(request, contributor_id):
# process the form # process the form
if request.method == 'POST': if request.method == 'POST':
...@@ -156,6 +183,8 @@ def vet_registration_request_ack(request, contributor_id): ...@@ -156,6 +183,8 @@ def vet_registration_request_ack(request, contributor_id):
contributor.rank = 1 contributor.rank = 1
contributor.vetted_by = request.user.contributor contributor.vetted_by = request.user.contributor
contributor.save() contributor.save()
group = Groups.objects.get(name='Registered Contributors')
request.user.groups.add(group)
email_text = ('Dear ' + title_dict[contributor.title] + ' ' + contributor.user.last_name + email_text = ('Dear ' + title_dict[contributor.title] + ' ' + contributor.user.last_name +
', \n\nYour registration to the SciPost publication portal has been accepted. ' + ', \n\nYour registration to the SciPost publication portal has been accepted. ' +
'You can now login and contribute. \n\nThe SciPost Team.') 'You can now login and contribute. \n\nThe SciPost Team.')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment