From 0f95b1ca35769215d89c8ff98dd29d18be10cda4 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Fri, 16 Apr 2021 14:21:53 +0200 Subject: [PATCH] Added login/logout, edited navbar and updated packages --- advlabdb/routes.py | 93 +++++++++++++++++++++++++--------- advlabdb/templates/layout.html | 4 +- poetry.lock | 77 ++++++++++++++-------------- 3 files changed, 110 insertions(+), 64 deletions(-) diff --git a/advlabdb/routes.py b/advlabdb/routes.py index d3aa7ee..f3b07b3 100644 --- a/advlabdb/routes.py +++ b/advlabdb/routes.py @@ -1,6 +1,6 @@ from advlabdb import app, user_datastore from flask import render_template, request, url_for, flash, redirect -from flask_security import auth_required, roles_required, hash_password +from flask_security import auth_required, roles_required, hash_password, current_user from advlabdb.utils import * from advlabdb.models import * @@ -19,11 +19,27 @@ def util_processor(): str(semester.id) + '">' + semester.label + '') return items - pages = ["Index", "Students", "Assistants", "Experiments", "Appointments", "Groups", "Users", "Semesters"] - def navbarItems(title): + adminPages = ["Students", "Assistants", "Experiments", "Appointments", "Groups", "Users", "Semesters"] + assistantPages = ["Students", "Assistants", "Experiments", "Appointments", "Groups"] + + if current_user.is_authenticated: + roleNames = [role.name for role in current_user.roles] + if "assistant" in roleNames: + pages = assistantPages + if "admin" in roleNames: + for p in adminPages: + if p not in pages: + pages.append(p) + elif "admin" in roleNames: + pages = adminPages + + pages.append("Logout") + else: + pages = ["Login"] + items = [] - for page in pages[1:]: + for page in pages: if page == title: active = " active" else: @@ -34,8 +50,9 @@ def util_processor(): return dict(semesterDropDownItems=semesterDropDownItems, activeSemesterLabel=Semester.query.get(activeSemester_id).label, - pages=pages, - navbarItems=navbarItems) + navbarItems=navbarItems, + current_user=current_user, + ) @app.route("/") @@ -43,7 +60,9 @@ def index(): global activeSemester_id activeSemester_id = Semester.query.all()[-1].id title = "Index" - return render_template(titleToTemplate(title) + ".html", title=title) + return render_template(titleToTemplate(title) + ".html", + title=title, + ) @app.route("/students") @@ -71,8 +90,11 @@ def students(): tables.append(makeTable(headerAndDataList=headerAndDataList, rows=part.part_students)) title = "Students" - return render_template(titleToTemplate(title) + ".html", title=title, - tables=tables, tablesLabels=tablesLabels) + return render_template(titleToTemplate(title) + ".html", + title=title, + tables=tables, + tablesLabels=tablesLabels, + ) @app.route("/assistants") @@ -93,8 +115,10 @@ def assistants(): rows=Assistant.query.filter(Assistant.user_id != None).all()) title = "Assistants" - return render_template(titleToTemplate(title) + ".html", title=title, - table=table) + return render_template(titleToTemplate(title) + ".html", + title=title, + table=table, + ) @app.route("/experiments") @@ -116,15 +140,20 @@ def experiments(): rows=part.part_experiments)) title = "Experiments" - return render_template(titleToTemplate(title) + ".html", title=title, - tables=tables, tablesLabels=tablesLabels) + return render_template(titleToTemplate(title) + ".html", + title=title, + tables=tables, + tablesLabels=tablesLabels, + ) @app.route("/appointments") @roles_required("admin") def appointments(): title = "Appointments" - return render_template(titleToTemplate(title) + ".html", title=title) + return render_template(titleToTemplate(title) + ".html", + title=title, + ) @app.route("/groups") @@ -147,8 +176,11 @@ def groups(): rows=part.groups)) title = "Groups" - return render_template(titleToTemplate(title) + ".html", title=title, - tables=tables, tablesLabels=tablesLabels) + return render_template(titleToTemplate(title) + ".html", + title=title, + tables=tables, + tablesLabels=tablesLabels, + ) @app.route("/users") @@ -162,8 +194,10 @@ def users(): rows=User.query.all()) title = "Users" - return render_template(titleToTemplate(title) + ".html", title=title, - table=table) + return render_template(titleToTemplate(title) + ".html", + title=title, + table=table, + ) @app.route("/set_semester", methods=["GET"]) @@ -172,7 +206,9 @@ def set_semester(): global activeSemester_id activeSemester_id = int(request.args.get("semester_id")) title = "Index" - return render_template(titleToTemplate(title) + ".html", title=title) + return render_template(titleToTemplate(title) + ".html", + title=title, + ) @app.route("/semesters") @@ -185,8 +221,10 @@ def semesters(): rows=Semester.query.all()) title = "Semesters" - return render_template(titleToTemplate(title) + ".html", title=title, - table=table) + return render_template(titleToTemplate(title) + ".html", + title=title, + table=table, + ) @app.route("/register", methods=["GET", "POST"]) @@ -203,6 +241,13 @@ def register(): user_datastore.create_user(email=email, password=passwordHash, roles=roles) db.session.commit() - return render_template("registered.html", title="Registered", - email=email, password=password, admin=admin) - return render_template("register.html", title="Register", form=form) + return render_template("registered.html", + title="Registered", + email=email, + password=password, + admin=admin, + ) + return render_template("register.html", + title="Register", + form=form, + ) diff --git a/advlabdb/templates/layout.html b/advlabdb/templates/layout.html index d258f97..29d8a49 100644 --- a/advlabdb/templates/layout.html +++ b/advlabdb/templates/layout.html @@ -22,7 +22,6 @@