Files
Bennys-Board/seed_roles.py
2025-11-27 00:00:50 +00:00

59 lines
1.3 KiB
Python

import os
from app import create_app
from core.models import db, User, Role, Permission
PERMS = [
"board.view", "board.post",
"quotes.view", "quotes.admin",
"publish.use",
"memos.read", "memos.write", "memos.admin",
]
ROLE_MAP = {
"admin": PERMS,
"member": ["board.view","quotes.view","publish.use","memos.read"],
"client": ["quotes.view"],
}
def main():
app = create_app()
with app.app_context():
# permissions
perm_objs = {}
for code in PERMS:
p = Permission.query.filter_by(code=code).first() or Permission(code=code)
db.session.add(p); perm_objs[code] = p
db.session.commit()
# roles
for rname, p_list in ROLE_MAP.items():
r = Role.query.filter_by(name=rname).first() or Role(name=rname)
r.permissions = [perm_objs[c] for c in p_list]
db.session.add(r)
db.session.commit()
# admin user
email = os.getenv("ADMIN_EMAIL")
username = os.getenv("ADMIN_USERNAME")
password = os.getenv("ADMIN_PASSWORD")
if email and username and password:
u = User.query.filter_by(email=email).first()
if not u:
u = User(email=email, username=username)
u.set_password(password)
db.session.add(u)
admin_role = Role.query.filter_by(name="admin").first()
if admin_role not in u.roles:
u.roles.append(admin_role)
db.session.commit()
print("Seeded admin:", email)
if __name__ == "__main__":
main()