59 lines
1.3 KiB
Python
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()
|