Attach the group to the user and to the request

This commit is contained in:
Alexis M 2019-07-19 01:16:06 +02:00
parent cef7a200dc
commit 690c551627
4 changed files with 41 additions and 18 deletions

View file

@ -106,7 +106,16 @@ async def auth_required(request, response):
if not email: if not email:
response.redirect = f"/sésame?next={request.path}" response.redirect = f"/sésame?next={request.path}"
return response return response
user = Person(email=email)
groups = Groups.load()
request["groups"] = groups
group = groups.get_user_group(email)
user = Person(
email=email,
group_id=group.id,
group_name=group.name)
request["user"] = user request["user"] = user
session.user.set(user) session.user.set(user)
@ -183,14 +192,14 @@ async def home(request, response):
@app.route("/groupes", methods=["GET"]) @app.route("/groupes", methods=["GET"])
async def handle_groups(request, response): async def handle_groups(request, response):
response.html("groups.html", {"groups": Groups.load()}) response.html("groups.html", {"groups": request["groups"]})
@app.route("/groupes/{id}/rejoindre", method=["GET"]) @app.route("/groupes/{id}/rejoindre", method=["GET"])
async def join_group(request, response, id): async def join_group(request, response, id):
groups = Groups.load()
user = session.user.get(None) user = session.user.get(None)
group = groups.add_user(user.email, id) group = request["groups"].add_user(user.email, id)
groups.persist() request['groups'].persist()
response.message(f"Vous avez bien rejoint le groupe '{group.name}'") response.message(f"Vous avez bien rejoint le groupe '{group.name}'")
response.redirect = "/groupes" response.redirect = "/groupes"
@ -207,9 +216,8 @@ async def create_group(request, response):
id=slugify(form.get('name')), id=slugify(form.get('name')),
name=form.get('name'), name=form.get('name'),
members=members) members=members)
groups = Groups.load() request["groups"].add_group(group)
groups.add_group(group) request["groups"].persist()
groups.persist()
response.message(f"Le groupe {group.name} à bien été créé") response.message(f"Le groupe {group.name} à bien été créé")
response.redirect = "/groupes" response.redirect = "/groupes"
response.html("edit_group.html", group=group) response.html("edit_group.html", group=group)
@ -217,9 +225,8 @@ async def create_group(request, response):
@app.route("/groupes/{id}/éditer", methods=["GET", "POST"]) @app.route("/groupes/{id}/éditer", methods=["GET", "POST"])
async def edit_group(request, response, id): async def edit_group(request, response, id):
groups = Groups.load() assert id in request["groups"].groups, "Impossible de trouver le groupe"
assert id in groups.groups, "Impossible de trouver le groupe" group = request["groups"].groups[id]
group = groups.groups[id]
if request.method == "POST": if request.method == "POST":
form = request.form form = request.form
members = [] members = []
@ -227,20 +234,21 @@ async def edit_group(request, response, id):
members = [m.strip() for m in form.get('members').split(',')] members = [m.strip() for m in form.get('members').split(',')]
group.members = members group.members = members
group.name = form.get('name') group.name = form.get('name')
groups.groups[id] = group request["groups"].groups[id] = group
groups.persist() request["groups"].persist()
response.redirect = "/groupes" response.redirect = "/groupes"
response.html("edit_group.html", group=group) response.html("edit_group.html", group=group)
@app.route("/groupes/{id}/supprimer", methods=["GET"]) @app.route("/groupes/{id}/supprimer", methods=["GET"])
async def delete_group(request, response, id): async def delete_group(request, response, id):
groups = Groups.load() assert id in request["groups"].groups, "Impossible de trouver le groupe"
assert id in groups.groups, "Impossible de trouver le groupe" deleted = request["groups"].groups.pop(id)
deleted = groups.groups.pop(id) request["groups"].persist()
groups.persist()
response.message(f"Le groupe {deleted.name} à bien été supprimé") response.message(f"Le groupe {deleted.name} à bien été supprimé")
response.redirect = "/groupes" response.redirect = "/groupes"
@app.route("/archives", methods=["GET"]) @app.route("/archives", methods=["GET"])
async def view_archives(request, response): async def view_archives(request, response):
response.html("archive.html", {"deliveries": Delivery.all(is_archived=True)}) response.html("archive.html", {"deliveries": Delivery.all(is_archived=True)})

View file

@ -87,11 +87,14 @@ class Person(Base):
email: str email: str
first_name: str = "" first_name: str = ""
last_name: str = "" last_name: str = ""
group_id: str = ""
group_name: str = ""
@property @property
def is_staff(self): def is_staff(self):
return not config.STAFF or self.email in config.STAFF return not config.STAFF or self.email in config.STAFF
@dataclass @dataclass
class Group(Base): class Group(Base):
id: str id: str
@ -136,6 +139,12 @@ class Groups(PersistedBase):
if email in group.members: if email in group.members:
group.members.remove(email) group.members.remove(email)
def get_user_group(self, email):
for group in self.groups.values():
if email in group.members:
return group
return None
@classmethod @classmethod
def init_fs(cls): def init_fs(cls):
cls.get_root().mkdir(parents=True, exist_ok=True) cls.get_root().mkdir(parents=True, exist_ok=True)

View file

@ -23,7 +23,7 @@
{% if request.user.is_staff %} {% if request.user.is_staff %}
<a class="button" href="/livraison"><i class="icon-hotairballoon"></i>&nbsp;Nouvelle livraison</a>&nbsp; <a class="button" href="/livraison"><i class="icon-hotairballoon"></i>&nbsp;Nouvelle livraison</a>&nbsp;
{% endif %} {% endif %}
<i class="icon-lock"></i>&nbsp;<span>{{ request["user"].email }}</span> <i class="icon-lock"></i>&nbsp;<span>{{ request["user"].email }} {% if request["user"].group_name %}({{ request["user"].group_name }}){% endif %}</span>
{% endif %} {% endif %}
</nav> </nav>
</section> </section>

View file

@ -9,4 +9,10 @@
{% include "includes/delivery_list.html" %} {% include "includes/delivery_list.html" %}
{% endwith %} {% endwith %}
<a href="/archives">Voir les livraisons archivées</a> <a href="/archives">Voir les livraisons archivées</a>
<hr>
<ul class="toolbox">
<li>
<a href="/groupes" class="button"><i class="icon-globe"></i>&nbsp;Gérer les groupes</a>
</li>
</ul>
{% endblock body %} {% endblock body %}