예제 #1
0
        //-------------------------------------------------------------------
        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);
        }