From 3b637de18835c079220a21a4defb5a36c1c054f1 Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Fri, 17 Apr 2026 23:07:37 +0200 Subject: [PATCH] feat: Implement custom permission settings in user registration and update user addition logic --- Web/app.py | 24 +++++-- Web/templates/register.html | 140 ++++++++++++++++++++++++++++++++---- Web/user.py | 24 ++++++- 3 files changed, 166 insertions(+), 22 deletions(-) diff --git a/Web/app.py b/Web/app.py index c61ab62..22a400a 100755 --- a/Web/app.py +++ b/Web/app.py @@ -6688,8 +6688,8 @@ def register(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] - name = request.form['name'] - last_name = request.form['last-name'] + permission_preset = (request.form.get('permission_preset') or 'standard_user').strip() + use_custom_permissions = request.form.get('use_custom_permissions') == 'on' is_student = bool(request.form.get('is_student')) if cfg.STUDENT_CARDS_MODULE_ENABLED else False student_card_id = us.normalize_student_card_id(request.form.get('student_card_id')) if cfg.STUDENT_CARDS_MODULE_ENABLED else '' max_borrow_days_raw = request.form.get('max_borrow_days') if cfg.STUDENT_CARDS_MODULE_ENABLED else None @@ -6703,6 +6703,17 @@ def register(): flash('Passwort ist zu schwach', 'error') return redirect(url_for('register')) + action_permissions = None + page_permissions = None + if use_custom_permissions: + action_permissions = {} + for action_key, _ in PERMISSION_ACTION_OPTIONS: + action_permissions[action_key] = request.form.get(f'action_{action_key}') == 'on' + + page_permissions = {} + for endpoint_name, _ in PERMISSION_PAGE_OPTIONS: + page_permissions[endpoint_name] = request.form.get(f'page_{endpoint_name}') == 'on' + max_borrow_days = None if is_student: if not student_card_id: @@ -6720,11 +6731,14 @@ def register(): us.add_user( username, password, - name, - last_name, + username, + '', is_student=is_student, student_card_id=student_card_id if is_student else None, - max_borrow_days=max_borrow_days + max_borrow_days=max_borrow_days, + permission_preset=permission_preset, + action_permissions=action_permissions, + page_permissions=page_permissions, ) return redirect(url_for('home')) return render_template( diff --git a/Web/templates/register.html b/Web/templates/register.html index 175f229..2834314 100755 --- a/Web/templates/register.html +++ b/Web/templates/register.html @@ -39,16 +39,7 @@ 👤 - -
- 👤 - -
- -
- 👤 - -
+

Klarnamen werden nicht gespeichert. Ein anonymes Kürzel wird automatisch aus dem Benutzernamen erzeugt.

@@ -81,6 +72,43 @@
{% endif %} +
+ + + + + + +
+
@@ -174,7 +202,8 @@ body { } input[type="text"], -input[type="password"] { +input[type="password"], +.form-select { width: 100%; padding: 0.8rem 1rem 0.8rem 3rem; border: 1px solid #ddd; @@ -185,12 +214,17 @@ input[type="password"] { } input[type="text"]:focus, -input[type="password"]:focus { +input[type="password"]:focus, +.form-select:focus { border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.2); outline: none; } +.form-select { + padding-left: 1rem; +} + input::placeholder { color: #aaa; } @@ -311,11 +345,89 @@ input::placeholder { .richtlinen{ color: #ec0920; } + +.anonymize-hint { + margin-top: 10px; + margin-bottom: 0; + background: #f0f9ff; + border: 1px solid #bae6fd; + border-radius: 8px; + padding: 10px 12px; + color: #0c4a6e; + font-size: 0.92rem; +} + +.permission-panels { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 12px; +} + +.permission-panel { + border: 1px solid #d1d5db; + border-radius: 8px; + padding: 10px; + background: #f8fafc; +} + +.permission-panel h4 { + margin: 0 0 8px; + font-size: 1rem; + color: #1f2937; +} + +.permission-check { + display: flex; + align-items: center; + gap: 8px; + margin: 4px 0; + color: #1f2937; +} -{% if student_cards_module_enabled %} -{% endif %} {% endblock %} \ No newline at end of file diff --git a/Web/user.py b/Web/user.py index 2c1d3ae..3c38d49 100755 --- a/Web/user.py +++ b/Web/user.py @@ -380,7 +380,18 @@ def check_nm_pwd(username, password): return user -def add_user(username, password, name, last_name, is_student=False, student_card_id=None, max_borrow_days=None): +def add_user( + username, + password, + name='', + last_name='', + is_student=False, + student_card_id=None, + max_borrow_days=None, + permission_preset='standard_user', + action_permissions=None, + page_permissions=None, +): """ Add a new user to the database. @@ -396,9 +407,16 @@ def add_user(username, password, name, last_name, is_student=False, student_card users = db['users'] if not check_password_strength(password): return False - permission_defaults = build_default_permission_payload('standard_user') + permission_defaults = build_default_permission_payload(permission_preset) + if isinstance(action_permissions, dict): + for key, value in action_permissions.items(): + permission_defaults['actions'][str(key)] = bool(value) + if isinstance(page_permissions, dict): + for key, value in page_permissions.items(): + permission_defaults['pages'][str(key)] = bool(value) - name_alias = build_name_synonym(name, last_name) + alias_source = name if str(name or '').strip() else username + name_alias = build_name_synonym(alias_source, '') user_doc = { 'Username': username,