Add per-role badge colors

This commit is contained in:
2026-07-20 10:08:14 -04:00
parent ffe9fa1cce
commit 03c6adc77e
5 changed files with 119 additions and 4 deletions

View File

@@ -270,6 +270,7 @@ def list_roles():
'roleid': r.roleid,
'rolename': r.rolename,
'description': r.description,
'color': r.color,
'usercount': r.users.count(),
'permissions': [p.name for p in r.permissions],
'isadmin': r.rolename == 'admin'
@@ -290,7 +291,8 @@ def create_role():
role = Role(
rolename=data['rolename'],
description=data.get('description')
description=data.get('description'),
color=data.get('color')
)
# Assign permissions
@@ -308,6 +310,7 @@ def create_role():
'roleid': role.roleid,
'rolename': role.rolename,
'description': role.description,
'color': role.color,
'permissions': [p.name for p in role.permissions]
}, message='Role created', http_code=201)
@@ -333,6 +336,12 @@ def update_role(roleid: int):
changes['description'] = {'old': role.description, 'new': data['description']}
role.description = data['description']
# Color is cosmetic - editable on any role, including admin
if 'color' in data:
if data['color'] != role.color:
changes['color'] = {'old': role.color, 'new': data['color']}
role.color = data['color']
# Update permissions
if 'permissions' in data and role.rolename != 'admin':
old_perms = [p.name for p in role.permissions]
@@ -351,6 +360,7 @@ def update_role(roleid: int):
'roleid': role.roleid,
'rolename': role.rolename,
'description': role.description,
'color': role.color,
'permissions': [p.name for p in role.permissions]
}, message='Role updated')
@@ -393,7 +403,7 @@ def user_to_dict(user: User) -> dict:
'mustchangepassword': bool(user.mustchangepassword),
'lastlogindate': user.lastlogindate.isoformat() + 'Z' if user.lastlogindate else None,
'failedlogins': user.failedlogins,
'roles': [{'roleid': r.roleid, 'rolename': r.rolename} for r in user.roles],
'roles': [{'roleid': r.roleid, 'rolename': r.rolename, 'color': r.color} for r in user.roles],
'createddate': user.createddate.isoformat() + 'Z' if user.createddate else None,
'modifieddate': user.modifieddate.isoformat() + 'Z' if user.modifieddate else None
}

View File

@@ -156,6 +156,7 @@ class Role(BaseModel):
roleid = db.Column(db.Integer, primary_key=True)
rolename = db.Column(db.String(50), unique=True, nullable=False)
description = db.Column(db.Text)
color = db.Column(db.String(20), comment='CSS color for the role badge')
# Permissions relationship
permissions = db.relationship(