Files
ctp_blogr/ctp_blogr/services/user.py
T
2026-10-06 16:23:08 +02:00

55 lines
1.9 KiB
Python

import sqlalchemy as sa
from ..models.user import User
class UserService(object):
@classmethod
def all(cls, request):
items = request.dbsession.query(User).order_by(sa.asc(User.name)).all()
return items
@classmethod
def by_name(cls, request, name ):
item = request.dbsession.query(User).filter(User.name == name).first()
return item
@classmethod
def by_google_sub(cls, request, google_sub):
# Le sub est l'identifiant stable de Google : l'email peut changer.
if not google_sub:
return None
return request.dbsession.query(User).filter(
User.google_sub == google_sub).first()
@classmethod
def delete(cls, request, id):
# Attention : aucune cascade vers entries.creator / entries.editor,
# supprimer un utilisateur laisse son email dans ces colonnes.
request.dbsession.query(User).filter(User.id == id).delete(synchronize_session=False)
return
def make_groupfinder(admin_emails):
# Retourne le callback de la politique d'authentification.
#
# AUCUNE requete SQL ici : pyramid_tm lit request.authenticated_userid dans
# manager.begin(), donc une requete par requete HTTP a l'interieur de la
# transaction, et la moindre erreur de base mettrait en 500 toutes les
# routes, y compris /login et le callback OAuth lui-meme.
# La liste des administrateurs vient de la configuration auth.admin_emails,
# et les comptes autorises sont ceux de la table users, verifiee dans le
# callback OAuth : un userid inconnu ne peut donc pas arriver ici.
admins = frozenset(admin_emails)
def groupfinder(userid, request):
if not userid:
# None => non connecte
return None
if userid in admins:
return ['group:administrators']
# [] => connecte mais sans droit manage
return []
return groupfinder