//------------------------------------------------------------------- public CResultAErreur AddRoleToActeurs(CRoleActeur role, CGroupeActeur groupe) { CResultAErreur result = CResultAErreur.True; CListeObjetsDonnees listeActeurs = new CListeObjetsDonnees(groupe.ContexteDonnee, typeof(CActeur)); //Sélectionne tous les acteurs du groupe qui n'ont pas le rôle CFiltreDataAvance filtre = new CFiltreDataAvance(CActeur.c_nomTable, "(RelationsGroupes.GroupeActeur.Id = @1 or " + "RelationsGroupes.GroupeActeur.RelationsTousGroupesContenants.GroupeActeurContenant.Id = @1) and " + "hasno ( " + role.NomTableDonneesActeur + ".Id)", groupe.Id); listeActeurs.Filtre = filtre; foreach (CActeur acteur in listeActeurs) { #if PDA CDonneesActeur donnee = (CDonneesActeur)Activator.CreateInstance(role.TypeDonneeActeur); donnee.ContexteDonnee = groupe.ContexteDonnee; #else CDonneesActeur donnee = (CDonneesActeur)Activator.CreateInstance(role.TypeDonneeActeur, new object[] { groupe.ContexteDonnee }); #endif donnee.CreateNewInCurrentContexte(); donnee.Acteur = acteur; donnee.IsDonneeActeurValide = donnee.VerifieDonnees(false); } return(result); }
//------------------------------------------------------------------- public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); if (!result) { return(result); } //Vérifie que les acteurs ont les rôles induits par leurs groupes DataTable table = contexte.Tables[GetNomTable()]; ArrayList lst = new ArrayList(table.Rows); foreach (DataRow row in lst) { if (row.RowState == DataRowState.Added) { CRelationActeur_GroupeActeur rel = new CRelationActeur_GroupeActeur(row); foreach (CRoleActeur role in rel.GroupeActeur.GetRoles()) { if (!rel.Acteur.HasRole(role, true)) { //Crée la donnée du role #if PDA CDonneesActeur donnee = (CDonneesActeur)Activator.CreateInstance(role.TypeDonneeActeur); donnee.ContexteDonnee = contexte; #else CDonneesActeur donnee = (CDonneesActeur)Activator.CreateInstance(role.TypeDonneeActeur, new object[] { contexte }); #endif donnee.CreateNewInCurrentContexte(); donnee.Acteur = rel.Acteur; donnee.IsDonneeActeurValide = donnee.VerifieDonnees(false); } } } if (row.RowState == DataRowState.Modified || row.RowState == DataRowState.Added || row.RowState == DataRowState.Deleted) { CRelationActeur_GroupeActeur rel = new CRelationActeur_GroupeActeur(row); //Invalide les données utilisateur (pour restrictions) CActeur acteurOld = null; CActeur acteurNew = null; if (row.HasVersion(DataRowVersion.Original)) { rel.VersionToReturn = DataRowVersion.Original; acteurOld = rel.Acteur; rel.VersionToReturn = DataRowVersion.Default; } if (row.HasVersion(DataRowVersion.Current)) { acteurNew = rel.Acteur; } if (acteurOld != null && acteurOld.Utilisateur != null) { acteurOld.Utilisateur.ForceChangementSyncSession(); } if (acteurNew != null && acteurNew.Utilisateur != null) { acteurNew.Utilisateur.ForceChangementSyncSession(); } } } return(result); }