Răsfoiți Sursa

Add Make Admin feature

Peter Oertel 1 an în urmă
părinte
comite
3573ca4ad2
2 a modificat fișierele cu 39 adăugiri și 2 ștergeri
  1. 17 2
      app/main.py
  2. 22 0
      app/templates/admin.html

+ 17 - 2
app/main.py

@@ -173,7 +173,7 @@ def login():
                 if not password:
                     flash("Can't set a blank password")
                     return redirect(url_for("login"))
-                
+
                 salt = bcrypt.gensalt()
                 user.passhash = bcrypt.hashpw(password.encode(), salt)
                 db.session.commit()
@@ -286,7 +286,7 @@ def admin():
             db.session.commit()
             flash("Reset user's password succesfully", category="success")
             return redirect(url_for("admin"))
-        
+
         if newusername := request.form.get("username-add"):
             newuser = User()
             newuser.username = newusername
@@ -295,9 +295,24 @@ def admin():
             flash("New user added successfully", category="success")
             return redirect(url_for("admin"))
 
+        if newadminid := request.form.get("userid-admin"):
+            newadmin = db.session.execute(
+                db.select(User).where(User.id == newadminid)
+            ).scalar_one_or_none()
+
+            if newadmin.is_admin:
+                flash("User is already an admin", category="warning")
+                return redirect(url_for("admin"))
+
+            newadmin.is_admin = True
+            db.session.commit()
+            flash("User is now an admin", category="success")
+            return redirect(url_for("admin"))
+
     users = db.session.execute(db.select(User)).scalars().all()
     return render_template("admin.html", users=users)
 
+
 @app.route("/logout", methods=["POST"])
 def logout():
     session.pop("userid", None)

+ 22 - 0
app/templates/admin.html

@@ -38,4 +38,26 @@ Toppers Tasks | Account
         </form>
     </div>
 </div>
+<div class="row">
+    <div class="task-card">
+        <h2>Make Admin</h2>
+        <form action="/admin" method="post">
+            <label for="user-select">Username</label>
+            <select class="form-control mb-2" name="userid-admin"
+                id="user-select">
+                {% for user in users %}
+                <option value="{{ user.id }}">{{ user.username }}</option>
+                {% endfor %}
+            </select>
+            <button type="submit" class="btn btn-primary max-wack">Make User
+                Into Admin</button>
+        </form>
+    </div>
+</div>
+<div class="row">
+    <div class="task-card">
+        <a href="/tableview" class="btn btn-primary max-wack">MySQL Table
+            View</a>
+    </div>
+</div>
 {% endblock %}