mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-26 14:42:25 +00:00
Merge branch 'anti_troll' into 'master'
Anti troll See merge request federez/re2o!58
This commit is contained in:
commit
9551ce90af
6 changed files with 79 additions and 14 deletions
|
@ -124,6 +124,8 @@ class Facture(FieldPermissionModelMixin, models.Model):
|
||||||
def can_edit(self, user_request, *args, **kwargs):
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
if not user_request.has_perm('cotisations.change_facture'):
|
if not user_request.has_perm('cotisations.change_facture'):
|
||||||
return False, u"Vous n'avez pas le droit d'éditer les factures"
|
return False, u"Vous n'avez pas le droit d'éditer les factures"
|
||||||
|
elif not user_request.has_perm('cotisations.change_all_facture') and not self.user.can_edit(user_request, *args, **kwargs)[0]:
|
||||||
|
return False, u"Vous ne pouvez pas éditer les factures de cet user protégé"
|
||||||
elif not user_request.has_perm('cotisations.change_all_facture') and\
|
elif not user_request.has_perm('cotisations.change_all_facture') and\
|
||||||
(self.control or not self.valid):
|
(self.control or not self.valid):
|
||||||
return False, u"Vous n'avez pas le droit d'éditer une facture\
|
return False, u"Vous n'avez pas le droit d'éditer une facture\
|
||||||
|
@ -134,6 +136,8 @@ class Facture(FieldPermissionModelMixin, models.Model):
|
||||||
def can_delete(self, user_request, *args, **kwargs):
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
if not user_request.has_perm('cotisations.delete_facture'):
|
if not user_request.has_perm('cotisations.delete_facture'):
|
||||||
return False, u"Vous n'avez pas le droit de supprimer une facture"
|
return False, u"Vous n'avez pas le droit de supprimer une facture"
|
||||||
|
if not self.user.can_edit(user_request, *args, **kwargs)[0]:
|
||||||
|
return False, u"Vous ne pouvez pas éditer les factures de cet user protégé"
|
||||||
if self.control or not self.valid:
|
if self.control or not self.valid:
|
||||||
return False, u"Vous ne pouvez pas supprimer une facture\
|
return False, u"Vous ne pouvez pas supprimer une facture\
|
||||||
contrôlée ou invalidée par un trésorier"
|
contrôlée ou invalidée par un trésorier"
|
||||||
|
@ -282,6 +286,8 @@ class Vente(models.Model):
|
||||||
def can_edit(self, user_request, *args, **kwargs):
|
def can_edit(self, user_request, *args, **kwargs):
|
||||||
if not user_request.has_perm('cotisations.change_vente'):
|
if not user_request.has_perm('cotisations.change_vente'):
|
||||||
return False, u"Vous n'avez pas le droit d'éditer les ventes"
|
return False, u"Vous n'avez pas le droit d'éditer les ventes"
|
||||||
|
elif not user_request.has_perm('cotisations.change_all_facture') and not self.facture.user.can_edit(user_request, *args, **kwargs)[0]:
|
||||||
|
return False, u"Vous ne pouvez pas éditer les factures de cet user protégé"
|
||||||
elif not user_request.has_perm('cotisations.change_all_vente') and\
|
elif not user_request.has_perm('cotisations.change_all_vente') and\
|
||||||
(self.facture.control or not self.facture.valid):
|
(self.facture.control or not self.facture.valid):
|
||||||
return False, u"Vous n'avez pas le droit d'éditer une vente\
|
return False, u"Vous n'avez pas le droit d'éditer une vente\
|
||||||
|
@ -292,6 +298,8 @@ class Vente(models.Model):
|
||||||
def can_delete(self, user_request, *args, **kwargs):
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
if not user_request.has_perm('cotisations.delete_vente'):
|
if not user_request.has_perm('cotisations.delete_vente'):
|
||||||
return False, u"Vous n'avez pas le droit de supprimer une vente"
|
return False, u"Vous n'avez pas le droit de supprimer une vente"
|
||||||
|
if not self.facture.user.can_edit(user_request, *args, **kwargs)[0]:
|
||||||
|
return False, u"Vous ne pouvez pas éditer les factures de cet user protégé"
|
||||||
if self.facture.control or not self.facture.valid:
|
if self.facture.control or not self.facture.valid:
|
||||||
return False, u"Vous ne pouvez pas supprimer une vente\
|
return False, u"Vous ne pouvez pas supprimer une vente\
|
||||||
contrôlée ou invalidée par un trésorier"
|
contrôlée ou invalidée par un trésorier"
|
||||||
|
|
|
@ -112,9 +112,10 @@ class Machine(FieldPermissionModelMixin, models.Model):
|
||||||
:param self: instance machine à éditer
|
:param self: instance machine à éditer
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison le cas échéant"""
|
:return: True ou False avec la raison le cas échéant"""
|
||||||
if not user_request.has_perm('machines.change_machine') and self.user != user_request:
|
if self.user != user_request:
|
||||||
return False, u"Vous ne pouvez pas éditer une machine d'un autre user\
|
if not user_request.has_perm('machines.change_interface') or not self.user.can_edit(self.user, user_request, *args, **kwargs)[0]:
|
||||||
que vous sans droit"
|
return False, u"Vous ne pouvez pas éditer une machine\
|
||||||
|
d'un autre user que vous sans droit"
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_delete(self, user_request, *args, **kwargs):
|
def can_delete(self, user_request, *args, **kwargs):
|
||||||
|
@ -123,9 +124,10 @@ class Machine(FieldPermissionModelMixin, models.Model):
|
||||||
:param self: instance machine à supprimer
|
:param self: instance machine à supprimer
|
||||||
:param user_request: instance user qui fait l'edition
|
:param user_request: instance user qui fait l'edition
|
||||||
:return: True ou False avec la raison de l'échec le cas échéant"""
|
:return: True ou False avec la raison de l'échec le cas échéant"""
|
||||||
if not user_request.has_perm('machines.delete_machine') and self.user != user_request:
|
if self.user != user_request:
|
||||||
return False, u"Vous ne pouvez pas éditer une machine d'un autre user\
|
if not user_request.has_perm('machines.change_interface') or not self.user.can_edit(self.user, user_request, *args, **kwargs)[0]:
|
||||||
que vous sans droit"
|
return False, u"Vous ne pouvez pas éditer une machine\
|
||||||
|
d'un autre user que vous sans droit"
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_view_all(user_request, *args, **kwargs):
|
def can_view_all(user_request, *args, **kwargs):
|
||||||
|
@ -1287,7 +1289,8 @@ class Interface(models.Model):
|
||||||
:param self: Instance interface à editer
|
:param self: Instance interface à editer
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if not user_request.has_perm('machines.change_interface') and self.machine.user != user_request:
|
if self.machine.user != user_request:
|
||||||
|
if not user_request.has_perm('machines.change_interface') or not self.machine.user.can_edit(user_request, *args, **kwargs)[0]:
|
||||||
return False, u"Vous ne pouvez pas éditer une machine\
|
return False, u"Vous ne pouvez pas éditer une machine\
|
||||||
d'un autre user que vous sans droit"
|
d'un autre user que vous sans droit"
|
||||||
return True, None
|
return True, None
|
||||||
|
@ -1298,9 +1301,10 @@ class Interface(models.Model):
|
||||||
:param self: Instance interface à del
|
:param self: Instance interface à del
|
||||||
:param user_request: Utilisateur qui fait la requête
|
:param user_request: Utilisateur qui fait la requête
|
||||||
:return: soit True, soit False avec la raison de l'échec"""
|
:return: soit True, soit False avec la raison de l'échec"""
|
||||||
if not user_request.has_perm('machines.delete_interface') and self.machine.user != user_request:
|
if self.machine.user != user_request:
|
||||||
return False, u"Vous ne pouvez pas éditer une machine d'un autre\
|
if not user_request.has_perm('machines.change_interface') or not self.machine.user.can_edit(user_request, *args, **kwargs)[0]:
|
||||||
user que vous sans droit"
|
return False, u"Vous ne pouvez pas éditer une machine\
|
||||||
|
d'un autre user que vous sans droit"
|
||||||
return True, None
|
return True, None
|
||||||
|
|
||||||
def can_view_all(user_request, *args, **kwargs):
|
def can_view_all(user_request, *args, **kwargs):
|
||||||
|
|
|
@ -450,7 +450,7 @@ class ListRightForm(ModelForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ListRight
|
model = ListRight
|
||||||
fields = ['name', 'unix_name', 'permissions', 'details']
|
fields = ['name', 'unix_name', 'critical', 'permissions', 'details']
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
prefix = kwargs.pop('prefix', self.Meta.model.__name__)
|
||||||
|
|
37
users/migrations/0068_auto_20180107_2245.py
Normal file
37
users/migrations/0068_auto_20180107_2245.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.7 on 2018-01-07 21:45
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0067_serveurpermission'),
|
||||||
|
]
|
||||||
|
|
||||||
|
def transfer_permissions(apps, schema_editor):
|
||||||
|
critical_rights = ['adm', 'admin', 'bureau', 'infra', 'tresorier', 'serveur', 'bofh']
|
||||||
|
db_alias = schema_editor.connection.alias
|
||||||
|
rights = apps.get_model("users", "ListRight")
|
||||||
|
for right in critical_rights:
|
||||||
|
rg = rights.objects.using(db_alias).filter(unix_name=right).first()
|
||||||
|
rg.critical=True
|
||||||
|
rg.save()
|
||||||
|
|
||||||
|
def untransfer_permissions(apps, schema_editor):
|
||||||
|
return
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='user',
|
||||||
|
options={'permissions': (('change_user_password', "Peut changer le mot de passe d'un user"), ('change_user_state', "Peut éditer l'etat d'un user"), ('change_user_force', 'Peut forcer un déménagement'), ('change_user_shell', "Peut éditer le shell d'un user"), ('change_user_groups', "Peut éditer les groupes d'un user ! Permission critique"), ('change_all_users', 'Peut éditer tous les users, y compris ceux dotés de droits. Superdroit'), ('view_user', 'Peut voir un objet user quelquonque'))},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='listright',
|
||||||
|
name='critical',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
migrations.RunPython(transfer_permissions, untransfer_permissions),
|
||||||
|
]
|
|
@ -233,6 +233,7 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin):
|
||||||
("change_user_force", "Peut forcer un déménagement"),
|
("change_user_force", "Peut forcer un déménagement"),
|
||||||
("change_user_shell", "Peut éditer le shell d'un user"),
|
("change_user_shell", "Peut éditer le shell d'un user"),
|
||||||
("change_user_groups", "Peut éditer les groupes d'un user ! Permission critique"),
|
("change_user_groups", "Peut éditer les groupes d'un user ! Permission critique"),
|
||||||
|
("change_all_users", "Peut éditer tous les users, y compris ceux dotés de droits. Superdroit"),
|
||||||
("view_user", "Peut voir un objet user quelquonque"),
|
("view_user", "Peut voir un objet user quelquonque"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -712,7 +713,19 @@ class User(FieldPermissionModelMixin, AbstractBaseUser, PermissionsMixin):
|
||||||
else:
|
else:
|
||||||
return False, u"Vous n'avez pas le droit d'éditer ce club"
|
return False, u"Vous n'avez pas le droit d'éditer ce club"
|
||||||
else:
|
else:
|
||||||
if self == user_request or user_request.has_perm('users.change_user'):
|
options, _created = AssoOption.objects.get_or_create()
|
||||||
|
if self == user_request:
|
||||||
|
return True, None
|
||||||
|
elif user_request.has_perm('users.change_all_users'):
|
||||||
|
return True, None
|
||||||
|
elif user_request.has_perm('users.change_user'):
|
||||||
|
if self.groups.filter(listright__critical=True):
|
||||||
|
return False, u"Utilisateurs avec droits critiques, ne peut etre édité"
|
||||||
|
elif self == options.utilisateur_asso:
|
||||||
|
return False, u"Impossible d'éditer l'utilisateur asso sans droit change_all_users"
|
||||||
|
else:
|
||||||
|
return True, None
|
||||||
|
elif user_request.has_perm('users.change_all_users'):
|
||||||
return True, None
|
return True, None
|
||||||
else:
|
else:
|
||||||
return False, u"Vous ne pouvez éditer un autre utilisateur que vous même"
|
return False, u"Vous ne pouvez éditer un autre utilisateur que vous même"
|
||||||
|
@ -1112,6 +1125,7 @@ class ListRight(Group):
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
gid = models.PositiveIntegerField(unique=True, null=True)
|
gid = models.PositiveIntegerField(unique=True, null=True)
|
||||||
|
critical = models.BooleanField(default=False)
|
||||||
details = models.CharField(
|
details = models.CharField(
|
||||||
help_text="Description",
|
help_text="Description",
|
||||||
max_length=255,
|
max_length=255,
|
||||||
|
|
|
@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
<tr>
|
<tr>
|
||||||
<th>Droit</th>
|
<th>Droit</th>
|
||||||
<th>Gid</th>
|
<th>Gid</th>
|
||||||
|
<th>Groupe/permission critique</th>
|
||||||
<th>Informations</th>
|
<th>Informations</th>
|
||||||
<th>Details</th>
|
<th>Details</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
@ -38,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{{ listright.name }}
|
{{ listright.name }}
|
||||||
</td>
|
</td>
|
||||||
<td>{{ listright.gid }}</td>
|
<td>{{ listright.gid }}</td>
|
||||||
|
<td>{{ listright.critical }}</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button class="btn btn-default" data-parent="#accordion_{{listright.gid}}" type="button" data-toggle="collapse" data-target="#collapseListRight_user_{{listright.gid}}" aria-expanded="true" aria-controls="collapseListRight_user_{{listright.gid}}">
|
<button class="btn btn-default" data-parent="#accordion_{{listright.gid}}" type="button" data-toggle="collapse" data-target="#collapseListRight_user_{{listright.gid}}" aria-expanded="true" aria-controls="collapseListRight_user_{{listright.gid}}">
|
||||||
|
|
Loading…
Reference in a new issue