Feature #14738
ferméNotification qu'un utilisateur ne joue plus un rôle donné dans des applications
100%
Description
L'idée de cette feature est de prendre appuie sur la solution réalisée pour corriger le bogue pour la 6.5 et qui se base sur le mécanisme de notification d'événements CDI. Il s'agit ici de rendre cette solution plus générique :
- à chaque utilisateur retiré d'un groupe, envoyer un événement sur les rôles des différentes applications pour lesquels le groupe est impliqué et pour lesquels l'utilisateur n'est plus concerné,
- à chaque retrait d'utilisateurs ou de groupes d'un rôle d'une application, envoyer un événement sur le rôle de l'application pour lequel les utilisateurs ont été retirés si ceux-ci ne jouent pas ce même rôle par ailleurs (appartenance à autre groupe qui joue le même rôle par exemple).
Pour l'instant, l'implémentation se contraindra aux seuls utilisateurs et non aux groupes.
Mis à jour par Miguel Moquillon il y a environ 2 mois
- Statut changé de New à In progress...
Mis à jour par Miguel Moquillon il y a environ 2 mois
- Statut changé de In progress... à Resolved
- % réalisé changé de 90 à 100
Cf PR https://github.com/Silverpeas/Silverpeas-Core/pull/1391 et https://github.com/Silverpeas/Silverpeas-Components/pull/894
Pour utiliser le nouveau mécanisme, il suffit d'implémenter un listener d'événements UserRoleEvent
. Cet événement est envoyé par le mécanisme avec comme attributs le nom du rôle qui a vue sa liste des utilisateurs modifiée, les identifiants des instances d'applications concernées et les identifiants des utilisateurs qui ne jouent plus ledit rôle (utilisateurs retirés de la liste donc).
Voici un exemple tiré du listener de ResourcesManager et qui met à jour la liste des validateurs potentiels de chaque ressource gérée par les différentes applications ResourcesManager :
@Service
public class UserRoleEventListener extends CDIResourceEventListener<UserRoleEvent> {
private static final String MANAGER_ROLE = "responsable";
@Inject
private ResourcesManagersSynchronizer synchronizer;
@Override
public void onDeletion(UserRoleEvent event) {
if (event.getRole().equals(MANAGER_ROLE)) {
Set<String> userIds = event.getUserIds();
event.getInstanceIds().forEach(a -> synchronizer.synchronize(a, userIds));
}
}
}
Mis à jour par Miguel Moquillon il y a environ un mois
- Statut changé de Resolved à Closed