mirror of
https://github.com/almet/copanier.git
synced 2025-04-28 11:32:38 +02:00
Attach the group to the user and to the request
This commit is contained in:
parent
cef7a200dc
commit
690c551627
4 changed files with 41 additions and 18 deletions
|
@ -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)})
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
{% if request.user.is_staff %}
|
||||
<a class="button" href="/livraison"><i class="icon-hotairballoon"></i> Nouvelle livraison</a>
|
||||
{% endif %}
|
||||
<i class="icon-lock"></i> <span>{{ request["user"].email }}</span>
|
||||
<i class="icon-lock"></i> <span>{{ request["user"].email }} {% if request["user"].group_name %}({{ request["user"].group_name }}){% endif %}</span>
|
||||
{% endif %}
|
||||
</nav>
|
||||
</section>
|
||||
|
|
|
@ -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> Gérer les groupes</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endblock body %}
|
||||
|
|
Loading…
Reference in a new issue