Initial Commit
This commit is contained in:
58
seed_roles.py
Normal file
58
seed_roles.py
Normal file
@@ -0,0 +1,58 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user