Attribuer super_admin au premier compte
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run

This commit is contained in:
root 2026-08-21 20:45:24 +00:00
parent 20362fb31e
commit 9a540c600f

View file

@ -14,7 +14,7 @@ from ..models.user import User
from ..models.college import College, Building, Zone, Room
from ..models.equipment import EquipmentCategory
from ..models.maintenance import Lot
from ..models.rbac import Role
from ..models.rbac import Role, Permission, RolePermission, UserRole
from ..services.rbac import replace_user_roles
from ..authorization import has_permission
from ..models.planning import WorkSchedule, CollegeClosure, ClosureWorkDay
@ -264,16 +264,33 @@ def api_save_step(step):
user = User(
username=username,
email=f'{username}@gmao.local',
role='admin',
role='admin', # LEGACY uniquement ; la sécurité utilise UserRole.
is_active=True
)
user.set_password(password)
db.session.add(user)
db.session.flush()
admin_role = Role.query.filter_by(slug='admin', is_active=True).first()
if admin_role:
replace_user_roles(user, [admin_role.id])
# Le premier compte est le compte de récupération de l'installation
# et doit recevoir explicitement le rôle protégé super_admin.
super_role = Role.query.filter_by(slug='super_admin', is_active=True).first()
if not super_role:
super_role = Role(slug='super_admin', name='Super administrateur',
description="Rôle système protégé donnant un accès complet à l'application.",
is_system=True, is_active=True)
db.session.add(super_role)
db.session.flush()
wildcard = Permission.query.filter_by(code='*').first()
if not wildcard:
wildcard = Permission(code='*', name="Accès complet à l'application",
module='system', action='all',
description="Accès complet réservé au super administrateur.",
is_active=True)
db.session.add(wildcard)
db.session.flush()
if not RolePermission.query.filter_by(role_id=super_role.id, permission_id=wildcard.id).first():
db.session.add(RolePermission(role_id=super_role.id, permission_id=wildcard.id, effect='allow'))
replace_user_roles(user, [super_role.id])
progress.admin_username = username
progress.step = 2
@ -588,7 +605,9 @@ def api_complete():
try:
progress = SetupProgress.get()
admin = User.query.filter_by(role='admin', is_active=True).first()
super_role = Role.query.filter_by(slug='super_admin', is_active=True).first()
admin = next((link.user for link in (super_role.user_links if super_role else [])
if link.user and link.user.is_active), None)
if not admin:
return jsonify({'error': 'Un administrateur actif est requis'}), 400
if progress.step < 10: