diff --git a/sapl/base/forms.py b/sapl/base/forms.py index 043d06a7e..0df1bdd89 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -67,6 +67,30 @@ class UsuarioCreateForm(ModelForm): if data['password1'] != data['password2']: raise ValidationError('Senhas informadas são diferentes') + def __init__(self, *args, **kwargs): + + super(UsuarioCreateForm, self).__init__(*args, **kwargs) + + row0 = to_row([('username', 12)]) + + row1 = to_row([('firstname', 6), + ('lastname', 6)]) + + row2 = to_row([('email', 6), + ('user_active', 6)]) + row3 = to_row( + [('password1', 6), + ('password2', 6)]) + + self.helper = FormHelper() + self.helper.layout = Layout( + row0, + row1, + row3, + row2, + 'roles', + form_actions(label='Confirmar')) + class UsuarioEditForm(ModelForm): ROLES = [(g.id, g.name) for g in Group.objects.all().order_by('name')] @@ -80,6 +104,25 @@ class UsuarioEditForm(ModelForm): model = get_user_model() fields = ['email', 'password1', 'password2', 'user_active', 'roles'] + def __init__(self, *args, **kwargs): + + super(UsuarioEditForm, self).__init__(*args, **kwargs) + + row1 = to_row([('email', 6), + ('user_active', 6)]) + row2 = to_row( + [('password1', 6), + ('password2', 6)]) + + row3 = to_row([(form_actions(label='Salvar Alterações'), 6)]) + + self.helper = FormHelper() + self.helper.layout = Layout( + row1, + row2, + 'roles', + row3) + def clean(self): super(UsuarioEditForm, self).clean() diff --git a/sapl/base/views.py b/sapl/base/views.py index 561a7c3e1..e78afce25 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -1,5 +1,6 @@ from django.conf import settings from django.contrib.auth import get_user_model, update_session_auth_hash +from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.models import Group from django.contrib.auth.tokens import default_token_generator from django.core.exceptions import ObjectDoesNotExist, PermissionDenied @@ -19,7 +20,7 @@ from django_filters.views import FilterView from haystack.views import SearchView from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm from sapl.base.models import Autor, TipoAutor -from sapl.crud.base import CrudAux +from sapl.crud.base import (CrudAux, make_pagination) from sapl.materia.models import (Autoria, MateriaLegislativa, TipoMateriaLegislativa) from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria, @@ -520,19 +521,32 @@ class RelatorioMateriasPorAutorView(FilterView): return context -class ListarUsuarioView(ListView): +class ListarUsuarioView(PermissionRequiredMixin, ListView): model = get_user_model() + template_name = 'auth/user_list.html' context_object_name = 'user_list' + permission_required = ('base.list_appconfig',) + paginate_by = 10 def get_queryset(self): qs = super(ListarUsuarioView, self).get_queryset() return qs.order_by('username') + def get_context_data(self, **kwargs): + context = super(ListarUsuarioView, self).get_context_data(**kwargs) + paginator = context['paginator'] + page_obj = context['page_obj'] + context['page_range'] = make_pagination( + page_obj.number, paginator.num_pages) + context['NO_ENTRIES_MSG'] = 'Nenhum usuário cadastrado.' + return context -class CreateUsuarioView(CreateView): + +class CreateUsuarioView(PermissionRequiredMixin, CreateView): model = get_user_model() form_class = UsuarioCreateForm success_message = 'Usuário criado com sucesso' + permission_required = ('base.add_appconfig',) def get_success_url(self): return reverse('sapl.base:user_list') @@ -545,13 +559,16 @@ class CreateUsuarioView(CreateView): new_user.first_name = data['firstname'] new_user.last_name = data['lastname'] new_user.set_password(data['password1']) + new_user.is_superuser = False + new_user.is_staff = False new_user.save() return HttpResponseRedirect(self.get_success_url()) -class DeleteUsuarioView(DeleteView): +class DeleteUsuarioView(PermissionRequiredMixin, DeleteView): model = get_user_model() + permission_required = ('base.delete_appconfig',) def get_success_url(self): return reverse('sapl.base:user_list') @@ -565,10 +582,11 @@ class DeleteUsuarioView(DeleteView): -class EditUsuarioView(UpdateView): +class EditUsuarioView(PermissionRequiredMixin, UpdateView): model = get_user_model() form_class = UsuarioEditForm - success_message = 'Usuário criado com sucesso' + success_message = 'Usuário editado com sucesso' + permission_required = ('base.change_appconfig',) def get_success_url(self): return reverse('sapl.base:user_list') diff --git a/sapl/templates/auth/user_form.html b/sapl/templates/auth/user_form.html index b3d9c95f8..3b19ee162 100644 --- a/sapl/templates/auth/user_form.html +++ b/sapl/templates/auth/user_form.html @@ -5,14 +5,10 @@
{% csrf_token %} - - {{ form }} -
- + {% crispy form %} {% if object.pk %} - Remover usuário + Remover usuário {% endif %} -
{% endblock base_content %} \ No newline at end of file diff --git a/sapl/templates/auth/user_list.html b/sapl/templates/auth/user_list.html index 151cf33e7..d1f45fca6 100644 --- a/sapl/templates/auth/user_list.html +++ b/sapl/templates/auth/user_list.html @@ -1,21 +1,33 @@ {% extends "base.html" %} -{% load i18n crispy_forms_tags %} - +{% load i18n %} +{% load tz %} +{% load common_tags %} {% block base_content %} -

Usuários

- - {% if user_list %} - - {% else %} -

Não existem usuários cadastrados

- {% endif %} - Criar Usuário +
+

Lista de usuários

+ {% if not user_list %} +

{{ NO_ENTRIES_MSG }}

+ {% else %} + + + + + + + + + {% for user in user_list %} + + + + + {% endfor %} + +
Nome de UsuárioE-mail do Usuário
+ {{ user.username }} + {{ user.email }}
+ {% endif %} + Criar Usuário +
+ {% include 'paginacao.html'%} {% endblock base_content %} \ No newline at end of file