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

View file

@ -87,11 +87,14 @@ class Person(Base):
email: str
first_name: str = ""
last_name: str = ""
group_id: str = ""
group_name: str = ""
@property
def is_staff(self):
return not config.STAFF or self.email in config.STAFF
@dataclass
class Group(Base):
id: str
@ -136,6 +139,12 @@ class Groups(PersistedBase):
if email in group.members:
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
def init_fs(cls):
cls.get_root().mkdir(parents=True, exist_ok=True)

View file

@ -23,7 +23,7 @@
{% if request.user.is_staff %}
<a class="button" href="/livraison"><i class="icon-hotairballoon"></i>&nbsp;Nouvelle livraison</a>&nbsp;
{% 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 %}
</nav>
</section>

View file

@ -9,4 +9,10 @@
{% include "includes/delivery_list.html" %}
{% endwith %}
<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 %}