+++ /dev/null
-/*
- * Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
- * This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
- *
- * Lilie is free software. You can redistribute it and/or modify since
- * you respect the terms of either (at least one of the both license) :
- * - under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- * - the CeCILL-C as published by CeCILL-C; either version 1 of the
- * License, or any later version
- *
- * There are special exceptions to the terms and conditions of the
- * licenses as they are applied to this software. View the full text of
- * the exception in file LICENSE.txt in the directory of this software
- * distribution.
- *
- * Lilie is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * Licenses for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the CeCILL-C along with Lilie. If not, see :
- * <http://www.gnu.org/licenses/> and
- * <http://www.cecill.info/licences.fr.html>.
- */
-
-
-
-package org.lilie.services.eliot.textes
-
-import org.lilie.services.eliot.securite.impl.Item
-
-import org.lilie.services.eliot.securite.impl.Autorite
-import org.lilie.services.eliot.securite.PermissionsManager
-import org.lilie.services.eliot.securite.impl.DefaultPermissionsManager
-import org.lilie.services.eliot.DistantAutoriteService
-import org.lilie.services.eliot.annuaire.AnnuaireService
-import org.lilie.services.eliot.applications.textes.recherche.TextesIndexationService
-import org.lilie.services.eliot.annuaire.SecuriteSession
-import org.lilie.services.eliot.annuaire.FonctionEnum
-import org.lilie.services.eliot.scolarite.personne.AutoriteNomAffichageService
-import org.lilie.services.eliot.droits.EliotDroitsService
-import org.lilie.services.eliot.fonctionnalites.EliotFonctionnalite
-import org.lilie.services.eliot.textes.fonctionnalite.TextesFonctionnalite
-import org.codehaus.groovy.grails.commons.GrailsApplication
-import org.lilie.services.eliot.droits.DroitsEtPermissionsService
-import org.lilie.services.eliot.droits.Droit
-
-/**
- * Façade recouperant les info sur les droits associé à un cahier de textes
- */
-class DroitsService extends EliotDroitsService {
-
- static transactional = true
-
- DistantAutoriteService distantAutoriteService
- TextesIndexationService textesIndexationService
- AnnuaireService annuaireService
- TextesActiviteService textesActiviteService
- org.lilie.services.eliot.scolarite.personne.LocalPersonneService localPersonneService
- AutoriteNomAffichageService autoriteNomAffichageService
- DroitsEtPermissionsService droitsEtPermissionsService
-
- // jcok : grailsApplication est un singleton
- @SuppressWarnings('GrailsStatelessService')
- GrailsApplication grailsApplication
-
- public static final String TYPE_GROUPE = 'g'
- public static final String TYPE_ACTEUR = 'u'
-
-
- protected List<EliotFonctionnalite> getFonctionnalites() {
- List<EliotFonctionnalite> result = []
- result.addAll(TextesFonctionnalite.values().toList())
- return result
- }
-
- public HashSet getFonctionnalitesAccessibles(SecuriteSession securiteSession) {
-
-
- List<EliotFonctionnalite> listeFonctionnalites = getFonctionnalites()
- Boolean isAccesLvsActive = grailsApplication.config.eliot.accesLvs.active
-
-
- if (!securiteSession.hasFonctionIn([FonctionEnum.DIRECTION])) {
- listeFonctionnalites.remove(
- TextesFonctionnalite.RECHERCHE_DES_CAHIERS_DE_TEXTES
- )
- }
-
- if (!isAccesLvsActive) {
- listeFonctionnalites.remove(
- TextesFonctionnalite.VIE_SCOLAIRE
- )
- }
-
- HashSet fonctionnalitesAccessibles = (HashSet) listeFonctionnalites
- return fonctionnalitesAccessibles
- }
-
- /**
- * Recoupere la liste des droits des groupes d'un cdt
- * @return une liste d'objets <code>Droit</code>
- */
- List<Droit> chargeDroitsGroupes(CahierDeTextes cahierDeTextes,
- SecuriteSession securiteSession) {
- Item item = cahierDeTextes.item
-
- return droitsEtPermissionsService.chargeDroitsGroupes(item, securiteSession)
- }
-
- /**
- * Recupere la liste des droits des acteurs d'un cdt
- * @return une liste d'objets <code>Droit</code>
- */
- List<Droit> chargeDroitsActeurs(CahierDeTextes cahierDeTextes,
- SecuriteSession securiteSession) {
- Item item = cahierDeTextes.item
- return droitsEtPermissionsService.chargeDroitsActeursItem(item, securiteSession)
- }
-
- /**
- * Met à jour les droits.
- * @param cahierDeTextes cahier de textes affecté
- * @param droitsActeurs une liste d'objets <code>Droit</code> pour les acteurs
- * @param droitsGroupes une liste d'objets <code>Droit </code> pour les groupes
- * @param item l'élément pour lequel on veut modifier les droits
- * @param securiteSession une session de securité
- * @throws org.lilie.services.eliot.securite.AutorisationException si la
- * <code>securiteSession</code> n'a pas les droits de modifer les droits...
- */
- void majDroits(CahierDeTextes cahierDeTextes,
- List<Droit> droitsActeurs,
- List<Droit> droitsGroupes,
- SecuriteSession securiteSession) {
-
- Item item = cahierDeTextes.item
-
- // Récupération des droits existants
- List droitsActeursExistants = chargeDroitsActeurs(
- cahierDeTextes,
- securiteSession
- )
- List droitsGroupesExistants = chargeDroitsGroupes(
- cahierDeTextes,
- securiteSession
- )
-
- // Calcul des droits à supprimer = droits existants - droits à ajouter ou maj,
- List idsAutoriteActeursSuppr =
- droitsActeursExistants*.idAutorite - droitsActeurs*.idAutorite
-
- List idsAutoriteGroupesSuppr =
- droitsGroupesExistants*.idAutorite - droitsGroupes*.idAutorite
-
- droitsActeurs = filtreDroitsPasChanges(droitsActeurs, droitsActeursExistants)
- droitsGroupes = filtreDroitsPasChanges(droitsGroupes, droitsGroupesExistants)
-
- // enregistre les droits à ajouter ou a maj
- enregistreDroitsActeurs(securiteSession, item, droitsActeurs)
- enregistreDroitsGroupes(securiteSession, item, droitsGroupes)
-
- // enregistre les droits à supprimmer
- enleveDroitsActeurs(securiteSession, item, idsAutoriteActeursSuppr)
- enleveDroitsGroupes(securiteSession, item, idsAutoriteGroupesSuppr)
-
- textesIndexationService.reindexerCahierDeTextesDroits(
- securiteSession,
- cahierDeTextes
- )
- }
-
- /**
- * Enleve de droitsNouvels les droits qui n'ont pas changee par rapport
- * aux droits existants
- * @param droitsNouvels
- * @param droitsExistants
- * @return droits a enregistrer
- */
- private List<Droit> filtreDroitsPasChanges(List<Droit> droitsNouvels,
- List<Droit> droitsExistants) {
- droitsNouvels.each { Droit droitNouvel ->
- Droit droitExistant = droitsExistants.find { it.idAutorite == droitNouvel.idAutorite }
- if (droitExistant) {
-
- if (droitExistant.consultationParDefaut) {
- droitNouvel.consultation = null // droit par defaut - on ne peut pas le changer
- } else if (droitExistant.consultation == droitNouvel.consultation) {
- droitNouvel.consultation = null // rien a change
- }
-
- if (droitExistant.modificationParDefaut) {
- droitNouvel.modification = null // droit par defaut - on ne peut pas le changer
- } else if (droitExistant.modification == droitNouvel.modification) {
- droitNouvel.modification = null // rien a change
- }
- }
- }
-
- return droitsNouvels.findAll { it.consultation != null || it.modification != null }
- }
-
- /**
- * Enleve les droits d'acteurs sur un item
- * @param securiteSession
- * @param item
- * @param droits
- */
- private void enleveDroitsActeurs(SecuriteSession securiteSession,
- Item item,
- List acteurAutoriteIds) {
- acteurAutoriteIds.each {String idAutorite ->
- Autorite autorite = distantAutoriteService.getAutoriteActeurForIdExterne(
- idAutorite,
- true
- )
- enregistreDroits(securiteSession, item, autorite, false, false)
- }
- }
-
- /**
- * Enleve les droits des groupes sur un item
- * @param securiteSession
- * @param item
- * @param droits
- */
- private void enleveDroitsGroupes(SecuriteSession securiteSession,
- Item item,
- List groupeAutoriteIds) {
- groupeAutoriteIds.each {String idAutorite ->
- Autorite autorite = distantAutoriteService.getAutoriteGroupeForIdExterne(
- idAutorite,
- true
- )
- enregistreDroits(securiteSession, item, autorite, false, false)
- }
- }
-
- /**
- * Enregistre les droits d'acteurs sur un item
- * @param securiteSession
- * @param item
- * @param droits
- */
- private void enregistreDroitsActeurs(SecuriteSession securiteSession,
- Item item,
- List<Droit> droits) {
- droits.each { Droit droit ->
- Autorite autorite = distantAutoriteService.getAutoriteActeurForIdExterne(
- droit.idAutorite,
- true
- )
- enregistreDroits(
- securiteSession,
- item,
- autorite,
- droit.consultation,
- droit.modification)
- }
- }
-
- /**
- * Enregistre les droits des groupes sur un item
- * @param securiteSession
- * @param item
- * @param droits
- */
- private void enregistreDroitsGroupes(SecuriteSession securiteSession,
- Item item,
- List<Droit> droits) {
- droits.each {Droit droit ->
- Autorite autorite = distantAutoriteService.getAutoriteGroupeForIdExterne(
- droit.idAutorite,
- true
- )
- enregistreDroits(
- securiteSession,
- item,
- autorite,
- droit.consultation,
- droit.modification)
- }
- }
-
- /**
- * Enregistre les droits d'une autorite sur un item
- * @param securiteSession
- * @param item
- * @param autorite
- * @param peutConsulter
- * @param peutModifier
- */
- private void enregistreDroits(SecuriteSession securiteSession,
- Item item,
- Autorite autorite,
- Boolean peutConsulter,
- Boolean peutModifier) {
- PermissionsManager permManager = new DefaultPermissionsManager(
- item,
- autorite,
- securiteSession
- )
- changeDroits(permManager, peutConsulter, peutModifier)
- }
-
- /**
- * Changement des droits en fonction des permissions passées en paramètre.
- */
- private void changeDroits(PermissionsManager permManager,
- Boolean peutConsulter,
- Boolean peutModifier) {
- if (peutModifier != null) {
- if (peutModifier) {
- permManager.addPermissionModification()
- } else {
- permManager.deletePermissionModification()
- }
- }
- if (peutConsulter != null) {
- if (peutConsulter) {
- permManager.addPermissionConsultation()
- } else {
- permManager.deletePermissionConsultation()
- }
- }
- }
-
-}