1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-06-29 20:51:11 +02:00

Compare commits

..

2 Commits

Author SHA1 Message Date
17be896a99 [permission] Add PermissionVar model 2022-10-10 19:37:51 +02:00
a69573ccdb Fix permission that allows users to create OAuth2 apps
Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
2022-08-29 11:21:45 +02:00
10 changed files with 203 additions and 163 deletions

View File

@ -1,5 +0,0 @@
from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination):
page_size_query_param = 'page_size'

View File

@ -4,7 +4,7 @@
from django.contrib import admin
from note_kfet.admin import admin_site
from .models import Permission, PermissionMask, Role
from .models import Permission, PermissionVar, PermissionMask, Role
@admin.register(PermissionMask, site=admin_site)
@ -15,6 +15,14 @@ class PermissionMaskAdmin(admin.ModelAdmin):
list_display = ('description', 'rank', )
@admin.register(PermissionVar, site=admin_site)
class PermissionVarAdmin(admin.ModelAdmin):
"""
Admin customisation for PermissionVar
"""
list_display = ('name', 'description',)
@admin.register(Permission, site=admin_site)
class PermissionAdmin(admin.ModelAdmin):
"""

View File

@ -243,7 +243,7 @@
"type": "delete",
"mask": 1,
"field": "",
"permanent": true,
"permanent": false,
"description": "Supprimer un alias à sa note"
}
},
@ -369,7 +369,7 @@
],
"query": "{}",
"type": "change",
"mask": 2,
"mask": 1,
"field": "valid",
"permanent": false,
"description": "Mettre à jour le statut de validation d'une transaction"
@ -705,7 +705,7 @@
],
"query": "{}",
"type": "view",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"description": "Voir toutes les transactions d'invitation"
@ -737,7 +737,7 @@
],
"query": "{\"pk\": [\"club\", \"pk\"]}",
"type": "change",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"description": "Modifier un club"
@ -865,7 +865,7 @@
],
"query": "{}",
"type": "add",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Ajouter un utilisateur"
@ -881,7 +881,7 @@
],
"query": "{\"email_confirmed\": false, \"registration_valid\": false}",
"type": "add",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Ajouter un profil"
@ -961,7 +961,7 @@
],
"query": "{\"destination\": [\"club\", \"note\"]}",
"type": "change",
"mask": 3,
"mask": 2,
"field": "",
"permanent": false,
"description": "Modifier le bouton d'un club"
@ -1105,7 +1105,7 @@
],
"query": "{}",
"type": "add",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Ajouter un crédit de la Soci\u00e9t\u00e9 g\u00e9n\u00e9rale"
@ -1137,7 +1137,7 @@
],
"query": "{}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Modifier un crédit de la Soci\u00e9t\u00e9 g\u00e9n\u00e9rale"
@ -1281,7 +1281,7 @@
],
"query": "{\"wei\": [\"club\"], \"first_year\": true, \"wei__membership_start__lte\": [\"today\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}",
"type": "add",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"description": "Inscrire un 1A au WEI"
@ -1297,7 +1297,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"], \"membership\": null}",
"type": "add",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"description": "Inscrire n'importe qui au WEI"
@ -1313,7 +1313,7 @@
],
"query": "{\"wei\": [\"club\"]}",
"type": "delete",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Supprimer une inscription WEI"
@ -1345,9 +1345,9 @@
],
"query": "{\"wei\": [\"club\"]}",
"type": "view",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"permanent": true,
"description": "Voir toutes les inscriptions WEI"
}
},
@ -1361,7 +1361,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "soge_credit",
"permanent": false,
"description": "Indiquer si une inscription WEI est payée par la Société générale"
@ -1393,7 +1393,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 2,
"mask": 1,
"field": "caution_check",
"permanent": false,
"description": "Dire si un chèque de caution est donné pour une inscription WEI"
@ -1409,7 +1409,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "birth_date",
"permanent": false,
"description": "Modifier la date de naissance d'une inscription WEI"
@ -1441,7 +1441,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "gender",
"permanent": false,
"description": "Modifier le genre de toute inscription WEI"
@ -1473,7 +1473,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "health_issues",
"permanent": false,
"description": "Modifier les problèmes de santé de toutes les inscriptions WEI"
@ -1505,7 +1505,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "emergency_contact_name",
"permanent": false,
"description": "Modifier le nom du contact en cas d'urgence de toute inscription WEI"
@ -1537,7 +1537,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "emergency_contact_phone",
"permanent": false,
"description": "Modifier le téléphone du contact en cas d'urgence de toute inscription WEI"
@ -1569,7 +1569,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "information_json",
"permanent": false,
"description": "Modifier les informations (sondage 1A, ...) d'une inscription WEI"
@ -1697,9 +1697,9 @@
],
"query": "[\"AND\", {\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}, [\"OR\", {\"registration__soge_credit\": true}, {\"user__note__balance__gte\": {\"F\": [\"F\", \"fee\"]}}]]",
"type": "add",
"mask": 2,
"mask": 3,
"field": "",
"permanent": false,
"permanent": true,
"description": "Créer une adhésion WEI pour le dernier WEI"
}
},
@ -1713,7 +1713,7 @@
],
"query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 2,
"mask": 1,
"field": "bus",
"permanent": false,
"description": "Modifier le bus d'une adhésion WEI"
@ -1729,7 +1729,7 @@
],
"query": "{\"club\": [\"club\"], \"club__weiclub__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 2,
"mask": 1,
"field": "team",
"permanent": false,
"description": "Modifier l'équipe d'une adhésion WEI"
@ -1745,9 +1745,9 @@
],
"query": "{\"club\": [\"club\"]}",
"type": "view",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"permanent": true,
"description": "Voir toutes les adhésions au WEI"
}
},
@ -1777,9 +1777,9 @@
],
"query": "{\"club\": [\"club\"], \"bus\": [\"membership\", \"weimembership\", \"bus\"]}",
"type": "view",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"permanent": true,
"description": "Voir les membres du bus"
}
},
@ -1793,9 +1793,9 @@
],
"query": "{\"club\": [\"club\"], \"team\": [\"membership\", \"weimembership\", \"team\"]}",
"type": "view",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"permanent": true,
"description": "Voir les membres de l'équipe"
}
},
@ -1809,7 +1809,7 @@
],
"query": "{\"pk\": [\"membership\", \"weimembership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "name",
"permanent": false,
"description": "Modifier le nom du bus"
@ -1825,7 +1825,7 @@
],
"query": "{\"pk\": [\"membership\", \"weimembership\", \"bus\", \"pk\"], \"wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "description",
"permanent": false,
"description": "Modifier la description du bus"
@ -1841,7 +1841,7 @@
],
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
"type": "add",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Ajouter une équipe à mon bus"
@ -1857,7 +1857,7 @@
],
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "name",
"permanent": false,
"description": "Modifier le nom d'une équipe de mon bus"
@ -1873,7 +1873,7 @@
],
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "color",
"permanent": false,
"description": "Modifier la couleur d'une équipe de mon bus"
@ -1889,7 +1889,7 @@
],
"query": "{\"bus\": [\"membership\", \"weimembership\", \"bus\"], \"bus__wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "description",
"permanent": false,
"description": "Modifier la description d'une équipe de mon bus"
@ -1905,7 +1905,7 @@
],
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "name",
"permanent": false,
"description": "Modifier le nom de mon équipe"
@ -1921,7 +1921,7 @@
],
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "color",
"permanent": false,
"description": "Modifier la couleur de mon équipe"
@ -1937,7 +1937,7 @@
],
"query": "{\"pk\": [\"membership\", \"weimembership\", \"team\", \"pk\"], \"bus__wei__date_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "description",
"permanent": false,
"description": "Modifier la description de mon équipe"
@ -1967,7 +1967,7 @@
"note",
"transaction"
],
"query": "[\"AND\", [\"OR\", {\"source\": [\"club\", \"note\"]}, {\"destination\": [\"club\", \"note\"]}], [\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}]]",
"query": "[\"AND\", [\"OR\", {\"source\": [\"club\", \"note\"]}, {\"destination\": [\"club\", \"note\"]}], [\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}]]",
"type": "change",
"mask": 2,
"field": "valid",
@ -1985,7 +1985,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "clothing_cut",
"permanent": false,
"description": "Modifier la coupe de vêtements d'une inscription WEI"
@ -2017,7 +2017,7 @@
],
"query": "{\"wei\": [\"club\"], \"wei__membership_end__gte\": [\"today\"]}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "clothing_size",
"permanent": false,
"description": "Modifier la taille de vêtements d'une inscription WEI"
@ -2225,7 +2225,7 @@
],
"query": "{}",
"type": "add",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Créer une note d'utilisateur"
@ -2257,7 +2257,7 @@
],
"query": "{}",
"type": "view",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"description": "Voir toutes les notes de club"
@ -2276,7 +2276,7 @@
"mask": 3,
"field": "",
"permanent": false,
"description": "Voir tous les adhérents de tous les clubs"
"description": "Voir tous les adhérents du club"
}
},
{
@ -2564,7 +2564,7 @@
"mask": 3,
"field": "inactivity_reason",
"permanent": false,
"description": "(Dé)bloquer n'importe quelle note et indiquer la raison"
"description": "(Dé)bloquer sa propre note et modifier la raison"
}
},
{
@ -2607,7 +2607,7 @@
"note",
"transaction"
],
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}]",
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}]",
"type": "change",
"mask": 2,
"field": "valid",
@ -2623,7 +2623,7 @@
"note",
"transaction"
],
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}]",
"query": "[\"OR\", {\"source__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": true}, {\"destination__balance__gte\": {\"F\": [\"SUB\", [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]], 5000]}, \"valid\": false}]",
"type": "change",
"mask": 2,
"field": "invalidity_reason",
@ -2641,7 +2641,7 @@
],
"query": "{\"club\": [\"club\"]}",
"type": "change",
"mask": 2,
"mask": 1,
"field": "display_image",
"permanent": false,
"description": "Changer l'image de la note de son club"
@ -2657,7 +2657,7 @@
],
"query": "{\"note__is_active\": true}",
"type": "add",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Ajouter n'importe quel alias à une note non bloquée"
@ -2753,7 +2753,7 @@
],
"query": "{\"profile__registration_valid\": false}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Modifier n'importe quel utilisateur non encore inscrit"
@ -2769,7 +2769,7 @@
],
"query": "{\"registration_valid\": false}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Modifier n'importe quel profil non encore inscrit"
@ -2865,7 +2865,7 @@
],
"query": "{}",
"type": "change",
"mask": 3,
"mask": 1,
"field": "display_image",
"permanent": false,
"description": "Changer l'image de n'importe quelle note"
@ -2883,7 +2883,7 @@
"type": "change",
"mask": 3,
"field": "is_active",
"permanent": false,
"permanent": true,
"description": "(Dé)bloquer la note de son club manuellement"
}
},
@ -2899,7 +2899,7 @@
"type": "change",
"mask": 3,
"field": "inactivity_reason",
"permanent": false,
"permanent": true,
"description": "(Dé)bloquer la note de son club et indiquer que cela a été fait manuellement"
}
},
@ -2979,7 +2979,7 @@
"type": "delete",
"mask": 1,
"field": "",
"permanent": true,
"permanent": false,
"description": "Supprimer une amitié à sa note"
}
},
@ -3009,7 +3009,7 @@
],
"query": "{\"trusting__is_active\": true}",
"type": "add",
"mask": 3,
"mask": 1,
"field": "",
"permanent": false,
"description": "Ajouter une amitié à une note non bloquée"
@ -3073,28 +3073,12 @@
],
"query": "[\"AND\", {\"source__trusting__trusted\": [\"user\", \"note\"]}, [\"OR\", {\"source__balance__gte\": {\"F\": [\"MUL\", [\"F\", \"amount\"], [\"F\", \"quantity\"]]}}, {\"valid\": false}]]",
"type": "add",
"mask": 2,
"mask": 1,
"field": "",
"permanent": false,
"description": "Transférer de l'argent depuis une note amie en restant positif"
}
},
{
"model": "permission.permission",
"pk": 197,
"fields": {
"model": [
"note",
"specialtransaction"
],
"query": "{\"source__notespecial__gte\":0}",
"type": "add",
"mask": 2,
"field": "",
"permanent": false,
"description": "Créer un crédit quelconque"
}
},
{
"model": "permission.role",
"pk": 1,
@ -3120,7 +3104,6 @@
16,
17,
22,
34,
48,
52,
126,
@ -3146,9 +3129,11 @@
"name": "Adh\u00e9rent Kfet",
"permissions": [
22,
34,
36,
39,
40,
70,
78,
79,
83,
@ -3173,7 +3158,9 @@
158,
159,
160,
179
179,
189,
190
]
}
},
@ -3210,7 +3197,9 @@
"for_club": null,
"name": "Pr\u00e9sident\u00b7e de club",
"permissions": [
50,
62,
141,
142
]
}
@ -3222,17 +3211,23 @@
"for_club": null,
"name": "Tr\u00e9sorier\u00b7\u00e8re de club",
"permissions": [
59,
19,
20,
21,
27,
59,
60,
61,
62,
127,
133,
136,
141,
142,
150,
166,
167,
168,
182,
184,
185
@ -3251,16 +3246,7 @@
26,
27,
30,
33,
41,
42,
63,
66,
135,
136,
137,
150,
172
33
]
}
},
@ -3282,10 +3268,6 @@
31,
32,
33,
37,
38,
41,
42,
43,
51,
53,
@ -3301,7 +3283,6 @@
67,
68,
69,
70,
71,
72,
73,
@ -3316,12 +3297,12 @@
143,
146,
147,
148,
149,
150,
151,
163,
164,
170,
171,
172,
173,
174,
@ -3329,7 +3310,10 @@
176,
177,
178,
183
188,
183,
186,
187
]
}
},
@ -3541,6 +3525,12 @@
"for_club": 2,
"name": "GC Kfet",
"permissions": [
32,
56,
58,
55,
57,
52,
23,
24,
25,
@ -3550,16 +3540,20 @@
29,
30,
31,
32,
37,
38,
41,
43,
148,
149,
70,
72,
143,
166,
167,
168,
170,
171,
176,
177,
178,
179,
180,
181,
182
]
}
@ -3571,9 +3565,6 @@
"for_club": 2,
"name": "Res[pot]",
"permissions": [
19,
25,
26,
37,
38,
41,
@ -3596,8 +3587,6 @@
"name": "GC WEI",
"permissions": [
22,
70,
72,
76,
85,
86,
@ -3619,8 +3608,8 @@
111,
112,
113,
128,
130
130,
131
]
}
},
@ -3633,13 +3622,12 @@
"permissions": [
22,
84,
115,
117,
118,
119,
120,
121,
122
122,
115
]
}
},
@ -3700,7 +3688,18 @@
"name": "Adhérent WEI",
"permissions": [
77,
114
87,
90,
93,
95,
97,
99,
101,
108,
109,
114,
128,
130
]
}
},
@ -3711,9 +3710,6 @@
"for_club": 1,
"name": "Secrétaire BDE",
"permissions": [
37,
41,
53,
54,
55,
56,
@ -3722,21 +3718,15 @@
135,
136,
137,
138,
139,
140,
143,
145,
146,
147,
148,
149,
150,
176,
177,
180,
181,
183
177
]
}
},
@ -3748,16 +3738,20 @@
"name": "PC Kfet",
"permissions": [
6,
22,
24,
25,
26,
27,
30,
34,
49,
50,
55,
56,
57,
58,
70,
72,
135,
137,
143,
@ -3768,7 +3762,8 @@
168,
176,
177,
197
180,
181
]
}
},

View File

@ -0,0 +1,22 @@
# Generated by Django 2.2.28 on 2022-10-10 17:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('permission', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='PermissionVar',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.SlugField(unique=True, verbose_name='name')),
('query', models.TextField(verbose_name='query')),
('description', models.CharField(blank=True, max_length=255, verbose_name='description')),
],
),
]

View File

@ -118,6 +118,25 @@ class PermissionMask(models.Model):
verbose_name_plural = _("permission masks")
class PermissionVar(models.Model):
name = models.SlugField(
unique=True,
blank=False,
verbose_name=_("name"),
)
query = models.TextField(
verbose_name=_("query"),
)
description = models.CharField(
max_length=255,
blank=True,
verbose_name=_("description"),
)
class Permission(models.Model):
PERMISSION_TYPES = [
@ -139,6 +158,7 @@ class Permission(models.Model):
# query -> ["AND", query, …] AND multiple queries
# | ["OR", query, …] OR multiple queries
# | ["NOT", query] Opposite of query
# | ["VAR", query] A var name as defined in PermissionVar
# query -> {key: value, …} A list of fields and values of a Q object
# key -> string A field name
# value -> int | string | bool | null Literal values
@ -150,6 +170,7 @@ class Permission(models.Model):
# | ["MUL", oper, …] Multiply F objects or literals
# | int | string | bool | null Literal values
# | ["F", string] A field
# | ["VAR", string] A var name as defined in PermissionVar
#
# Examples:
# Q(is_superuser=True) := {"is_superuser": true}
@ -215,6 +236,8 @@ class Permission(models.Model):
return functools.reduce(operator.mul, [Permission.compute_f(oper, **kwargs) for oper in oper[1:]])
elif oper[0] == 'F':
return F(oper[1])
elif oper[0] == 'VAR':
return compute_f(json.loads(PermissionVar.objects.get(name=oper[1]).query), **kwargs)
else:
field = kwargs[oper[0]]
for i in range(1, len(oper)):
@ -289,6 +312,8 @@ class Permission(models.Model):
return functools.reduce(operator.or_, [Permission._about(query, **kwargs) for query in query[1:]])
elif query[0] == 'NOT':
return ~Permission._about(query[1], **kwargs)
elif query[0] == 'VAR':
return Permission._about(json.loads(PermissionVar.objects.get(name=query[1]).query), **kwargs)
else:
return Q(pk=F("pk")) if Permission.compute_param(query, **kwargs) else ~Q(pk=F("pk"))
elif isinstance(query, dict):
@ -339,7 +364,6 @@ class Role(models.Model):
"member.Club",
verbose_name=_("for club"),
on_delete=models.PROTECT,
blank=True,
null=True,
default=None,
)

View File

@ -310,8 +310,8 @@ class SogeCredit(models.Model):
amount = sum(transaction.total for transaction in self.transactions.all())
if 'wei' in settings.INSTALLED_APPS:
from wei.models import WEIMembership
if not WEIMembership.objects\
.filter(club__weiclub__year=self.credit_transaction.created_at.year, user=self.user).exists():
if not WEIMembership.objects.filter(club__weiclub__year=datetime.date.today().year, user=self.user)\
.exists():
# 80 € for people that don't go to WEI
amount += 8000
return amount
@ -329,18 +329,17 @@ class SogeCredit(models.Model):
bde_qs = Membership.objects.filter(user=self.user, club=bde, date_start__gte=bde.membership_start)
kfet_qs = Membership.objects.filter(user=self.user, club=kfet, date_start__gte=kfet.membership_start)
## Soge do not pay BDE and kfet memberships this year (2022-2023)
# if bde_qs.exists():
# m = bde_qs.get()
# if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
# if m.transaction not in self.transactions.all():
# self.transactions.add(m.transaction)
#
# if kfet_qs.exists():
# m = kfet_qs.get()
# if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
# if m.transaction not in self.transactions.all():
# self.transactions.add(m.transaction)
if bde_qs.exists():
m = bde_qs.get()
if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
if m.transaction not in self.transactions.all():
self.transactions.add(m.transaction)
if kfet_qs.exists():
m = kfet_qs.get()
if MembershipTransaction.objects.filter(membership=m).exists(): # non-free membership
if m.transaction not in self.transactions.all():
self.transactions.add(m.transaction)
if 'wei' in settings.INSTALLED_APPS:
from wei.models import WEIClub

View File

@ -108,7 +108,7 @@ class InvoiceListView(LoginRequiredMixin, SingleTableView):
name="",
address="",
)
if not PermissionBackend.check_perm(self.request, "treasury.view_invoice", sample_invoice):
if not PermissionBackend.check_perm(self.request, "treasury.add_invoice", sample_invoice):
raise PermissionDenied(_("You are not able to see the treasury interface."))
return super().dispatch(request, *args, **kwargs)

View File

@ -14,17 +14,14 @@ from .base import WEISurvey, WEISurveyInformation, WEISurveyAlgorithm, WEIBusInf
from ...models import WEIMembership
WORDS = [
'ABBA', 'After', 'Alcoolique anonyme', 'Ambiance festive', 'Années 2000', 'Apéro', 'Art',
'Baby foot billard biere pong', 'BBQ', 'Before', 'Bière pong', 'Bon enfant', 'Calme', 'Canapé',
'Chanson paillarde', 'Chanson populaire', 'Chartreuse', 'Cheerleader', 'Chill', 'Choré',
'Cinéma', 'Cocktail', 'Comédie musicle', 'Commercial', 'Copaing', 'Danse', 'Dancefloor',
'Electro', 'Fanfare', 'Gin tonic', 'Inclusif', 'Jazz', "Jeux d'alcool", 'Jeux de carte',
'Jeux de rôle', 'Jeux de société', 'JUL', 'Jus de fruit', 'Kfet', 'Kleptomanie assurée',
'LGBTQ+', 'Livre', 'Morning beer', 'Musique', 'NAPS', 'Paillettes', 'Pastis', 'Paté Hénaff',
'Peluche', 'Pena baiona', "Peu d'alcool", 'Pilier de bar', 'PMU', 'Poulpe', 'Punch', 'Rap',
'Réveil', 'Rock', 'Rugby', 'Sandwich', 'Serge', 'Shot', 'Sociable', 'Spectacle', 'Techno',
'Techno house', 'Thérapie Taxi', 'Tradition kchanaises', 'Troisième mi-temps', 'Turn up',
'Vodka', 'Vodka pomme', 'Volley', 'Vomi stratégique'
'13 organisé', '3ième mi temps', 'Années 2000', 'Apéro', 'BBQ', 'BP', 'Beauf', 'Binge drinking', 'Bon enfant',
'Cartouche', 'Catacombes', 'Chansons paillardes', 'Chansons populaires', 'Chanteur', 'Chartreuse', 'Chill',
'Core', 'DJ', 'Dancefloor', 'Danse', 'David Guetta', 'Disco', 'Eau de vie', 'Électro', 'Escalade', 'Familial',
'Fanfare', 'Fracassage', 'Féria', 'Hard rock', 'Hoeggarden', 'House', 'Huit-six', 'IPA', 'Inclusif', 'Inferno',
'Introverti', 'Jager bomb', 'Jazz', 'Jeux d\'alcool', 'Jeux de rôles', 'Jeux vidéo', 'Jul', 'Jus de fruit',
'Karaoké', 'LGBTQI+', 'Lady Gaga', 'Loup garou', 'Morning beer', 'Métal', 'Nuit blanche', 'Ovalie', 'Psychedelic',
'Pétanque', 'Rave', 'Reggae', 'Rhum', 'Ricard', 'Rock', 'Rosé', 'Rétro', 'Séducteur', 'Techno', 'Thérapie taxi',
'Théâtre', 'Trap', 'Turn up', 'Underground', 'Volley', 'Wati B', 'Zinédine Zidane',
]

View File

@ -252,7 +252,7 @@ REST_FRAMEWORK = {
'rest_framework.authentication.TokenAuthentication',
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
],
'DEFAULT_PAGINATION_CLASS': 'apps.api.pagination.CustomPagination',
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20,
}

View File

@ -23,11 +23,11 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% csrf_token %}
{{ form|crispy }}
{{ profile_form|crispy }}
{% comment "Soge not for membership (only WEI)" %} {{ soge_form|crispy }} {% endcomment %}
{{ soge_form|crispy }}
<button class="btn btn-success" type="submit">
{% trans "Sign up" %}
</button>
</form>
</div>
</div>
{% endblock %}
{% endblock %}