Add admin check and update FoodItems model

Introduced an admin_required check for all admin routes using Flask-Login's current_user. Updated the FoodItems model to use per-100g nutritional fields and removed unit relationships. Seed script now creates both admin and regular user accounts.
This commit is contained in:
2025-06-27 17:23:54 +02:00
parent 1b428b0bda
commit a5312d7ad0
3 changed files with 28 additions and 15 deletions

View File

@@ -1,4 +1,6 @@
from flask import Blueprint, render_template
from flask import Blueprint, render_template, abort
from flask_login import current_user
from models import FoodItems
admin_bp = Blueprint(
"admin",
@@ -8,6 +10,13 @@ admin_bp = Blueprint(
)
@admin_bp.before_request
def admin_required():
if not current_user.is_admin:
abort(403)
@admin_bp.route("/food_items", methods=["GET"])
def food_items():
return render_template("food_items.html")
items = FoodItems.query.all()
return render_template("food_items.html", items=items)

View File

@@ -8,11 +8,15 @@ class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)
password = db.Column(db.String, nullable=False)
is_admin = db.Column(db.Boolean, nullable=False, default=False)
def __init__(self, username: str, password: str):
def __init__(
self, username: str, password: str, is_admin: bool = False
) -> None:
super().__init__()
self.username = username
self.password = generate_password_hash(password=password)
self.is_admin = is_admin
def check_password(self, password: str) -> bool:
return check_password_hash(pwhash=self.password, password=password)
@@ -32,14 +36,10 @@ class FoodItems(db.Model):
__tablename__ = "food_item"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(150), unique=True, nullable=False)
amount = db.Column(db.Integer, nullable=False)
unit_id = db.Column(db.Integer, db.ForeignKey("unit.id"), nullable=False)
unit = db.relationship("Units")
energy = db.Column(db.Float)
protein = db.Column(db.Float)
carbs = db.Column(db.Float)
sugar = db.Column(db.Float)
fats = db.Column(db.Float)
saturated_fats = db.Column(db.Float)
energy_100g = db.Column(db.Float)
protein_100g = db.Column(db.Float)
carbs_100g = db.Column(db.Float)
sugar_100g = db.Column(db.Float)
fats_100g = db.Column(db.Float)
saturated_fats_100g = db.Column(db.Float)

View File

@@ -1,7 +1,11 @@
from application import db, app
from models import User
from models import User, FoodItems
with app.app_context():
User.query.delete()
db.session.add(User("admin", "admin"))
db.session.add(User(username="admin", password="admin", is_admin=True))
db.session.add(User(username="user", password="user", is_admin=False))
db.session.commit()