コード例 #1
0
        public static CListeRestrictionsUtilisateurSurType GetRestrictionsClient(CConfigModulesTimos configModules)
        {
            CListeRestrictionsUtilisateurSurType liste = new CListeRestrictionsUtilisateurSurType();

            if (configModules == null)
            {
                return(liste);
            }

            List <Type> tps = new List <Type>(CContexteDonnee.GetAllTypes());

            foreach (Type tp in tps)
            {
                object[] atts = tp.GetCustomAttributes(typeof(AModulesClient), false);
                if (atts.Length == 1)
                {
                    AModulesClient att = (AModulesClient)atts[0];

                    List <CLicenceModuleClientPrtct> modulesDuType = new List <CLicenceModuleClientPrtct>();
                    foreach (string strIdModule in att.IdsModulesClient)
                    {
                        CLicenceModuleClientPrtct modulePresent = configModules.GetModuleClient(strIdModule);
                        if (modulePresent != null)
                        {
                            modulesDuType.Add(modulePresent);
                        }
                    }

                    if (modulesDuType.Count == 0)
                    {
                        CRestrictionUtilisateurSurType restriction = new CRestrictionUtilisateurSurType(tp);
                        foreach (string strIdModule in att.IdsModulesClient)
                        {
                            CRestrictionUtilisateurSurType restric = new CRestrictionUtilisateurSurType(tp);
                            restric.RestrictionSysteme = configModules.GetRestrictionSiModuleAbsent(strIdModule);
                            restriction.Combine(restric);
                        }
                        liste.AddRestriction(restriction);
                    }
                    else
                    {
                        CRestrictionUtilisateurSurType restriction = new CRestrictionUtilisateurSurType(tp);
                        foreach (CLicenceModuleClientPrtct module in modulesDuType)
                        {
                            CRestrictionUtilisateurSurType restric = new CRestrictionUtilisateurSurType(tp);
                            restric.RestrictionSysteme = module.Restriction;
                            restriction.Combine(restric);
                        }
                        if (!restriction.HasRestrictions)
                        {
                            restriction = new CRestrictionUtilisateurSurType(restriction.TypeAssocie);
                            restriction.RestrictionUtilisateur = restriction.RestrictionGlobale;
                        }
                        liste.AddRestriction(restriction);
                    }
                }
            }
            CompleteRestrictionsClient(configModules, liste);
            return(liste);
        }
コード例 #2
0
        /// ///////////////////////////////////////////////////
        public CListeRestrictionsUtilisateurSurType GetListeRestrictions(int?nIdVersion)
        {
            CListeRestrictionsUtilisateurSurType liste = new CListeRestrictionsUtilisateurSurType();

            CConfigurationRestrictions.AppliqueRestrictions(CTimosServeur.c_keyRestrictionAllUsers, liste);

            CDonneesActeurUtilisateur user = Utilisateur;

            //C'est pas une session système
            if (user != null)
            {
                liste.Combine(user.GetRestrictions(nIdVersion));
            }

            liste.Combine(GetListeRestrictionsModulesClient());
            CConfigurationRestrictions.AppliqueRestrictions(CTimosServeur.c_keyRestrictionAllUsers, liste);
            if (UserLicence != null && UserLicence.IsReadOnly)
            {
                foreach (Type tp in CContexteDonnee.GetAllTypes())
                {
                    CRestrictionUtilisateurSurType rest   = liste.GetRestriction(tp);
                    CRestrictionUtilisateurSurType restRO = new CRestrictionUtilisateurSurType(tp);
                    restRO.RestrictionSysteme = ERestriction.ReadOnly;
                    rest.Combine(restRO);
                    liste.AddRestriction(rest);
                }
            }
            return(liste);
        }
コード例 #3
0
        /////////////////////////////////////////////////////////////////////////
        public static void AppliqueRestriction(string strCle, CRestrictionUtilisateurSurType restriction)
        {
            CListeRestrictionsUtilisateurSurType liste = (CListeRestrictionsUtilisateurSurType)m_tableRestrictions[strCle];

            if (liste != null)
            {
                CRestrictionUtilisateurSurType rest = liste.GetRestriction(restriction.TypeAssocie);
                restriction.Combine(rest);
            }
        }
コード例 #4
0
        public static CListeRestrictionsUtilisateurSurType GetRestrictionsApp(CConfigModulesTimos configModules)
        {
            CListeRestrictionsUtilisateurSurType liste = new CListeRestrictionsUtilisateurSurType();

            if (configModules == null)
            {
                return(liste);
            }

            List <Type> tps = new List <Type>(CContexteDonnee.GetAllTypes());

            if (tps.Count == 0)
            {
                throw new Exception("No type loaded for licences");
            }
            foreach (Type tp in tps)
            {
                object[] atts = tp.GetCustomAttributes(typeof(AModulesApp), false);
                if (atts.Length == 1)
                {
                    AModulesApp att = (AModulesApp)atts[0];

                    List <CLicenceModuleAppPrtct> modulesDuType = new List <CLicenceModuleAppPrtct>();
                    foreach (string strIdModule in att.IdsModulesApplicatif)
                    {
                        CLicenceModuleAppPrtct modulePresent = configModules.GetModuleApp(strIdModule);
                        if (modulePresent != null)
                        {
                            modulesDuType.Add(modulePresent);
                        }
                    }
                    if (modulesDuType.Count == 0)
                    {
                        CRestrictionUtilisateurSurType restriction = new CRestrictionUtilisateurSurType(tp, ERestriction.Hide);
                        liste.AddRestriction(restriction);
                    }
                    else
                    {
                        CRestrictionUtilisateurSurType restriction = new CRestrictionUtilisateurSurType(tp);
                        foreach (CLicenceModuleAppPrtct module in modulesDuType)
                        {
                            CRestrictionUtilisateurSurType restric = new CRestrictionUtilisateurSurType(tp);
                            restric.RestrictionSysteme = module.Restriction;
                            restriction.Combine(restric);
                        }
                        liste.AddRestriction(restriction);
                    }
                }
            }
            CompleteRestrictionsApp(configModules, liste);
            return(liste);
        }
コード例 #5
0
        public static void AjouteRestriction(string strCle, CRestrictionUtilisateurSurType restriction)
        {
            CListeRestrictionsUtilisateurSurType liste = (CListeRestrictionsUtilisateurSurType)m_tableRestrictions[strCle];

            if (liste == null)
            {
                liste = new CListeRestrictionsUtilisateurSurType();
                m_tableRestrictions[strCle] = liste;
            }

            CRestrictionUtilisateurSurType rest = liste.GetRestriction(restriction.TypeAssocie);

            rest.Combine(restriction);
        }
コード例 #6
0
ファイル: CUtilElementAEO.cs プロジェクト: ykebaili/Timos
        //--------------------------------------------------------------------------------
        /// <summary>
        /// Complete les restrictions pour un objet donné
        /// </summary>
        /// <param name="restriction"></param>
        public static void CompleteRestriction(IElementAEO element, CRestrictionUtilisateurSurType restriction)
        {
            CRestrictionUtilisateurSurType restCache = CCacheRestrictions.GetRestriction(element);

            if (restCache != null)
            {
                restriction.Combine(restCache);
                return;
            }
            CContexteDonnee contexte = ((CObjetDonneeAIdNumerique)element).ContexteDonnee;
            CSessionClient  session  = CSessionClient.GetSessionForIdSession(contexte.IdSession);

            if (session != null)
            {
                //TESTDBKEYOK
                CDbKey keyUtilisateur          = session.GetInfoUtilisateur().KeyUtilisateur;
                CDonneesActeurUtilisateur user = new CDonneesActeurUtilisateur(contexte);
                if (user.ReadIfExists(keyUtilisateur))
                {
                    foreach (CRelationUtilisateur_Profil rel in user.RelationsProfils)
                    {
                        rel.CompleteRestriction(element, restriction);
                    }
                }
            }
            //Vérifie qu'on a le droit de voir l'élément
            try
            {
                if (!(element is CObjetDonneeAIdNumerique) ||
                    !((CObjetDonneeAIdNumerique)element).IsDeleted)
                {
                    if (!((CObjetDonnee)element).IsNew())//On ne peut pas appliquer la restriction sur un élément nouveau !
                    {
                        CListeObjetsDonnees lst = new CListeObjetsDonnees(element.ContexteDonnee, element.GetType());
                        lst.Filtre = new CFiltreData(element.GetChampId() + "=@1", element.Id);
                        lst.AppliquerFiltreAffichage = true;
                        lst.PreserveChanges          = true;
                        if (lst.Count == 0)
                        {
                            restriction.RestrictionUtilisateur = ERestriction.Hide;
                        }
                    }
                }
            }
            catch { }
            CCacheRestrictions.SetRestriction(element, restriction);
        }
コード例 #7
0
        ////////////////////////////////////////////////
        public void CompleteRestriction(IElementAEO element, CRestrictionUtilisateurSurType restriction)
        {
            DataRowVersion originalVersion = ((CObjetDonnee)element).VersionToReturn;

            try
            {
                if (element.Row.RowState == DataRowState.Deleted)
                {
                    ((CObjetDonnee)element).VersionToReturn = DataRowVersion.Original;
                }

                string strCodesEO = element.CodesEntitesOrganisationnelles;
                int?   nIdVersion = element.ContexteDonnee.IdVersionDeTravail;
                if (nIdVersion < 0)
                {
                    //On ne travaille ni dans le référentiel, ni dans une version,
                    //Il faut donc prendre les droits pour l'objet dans sa propre version
                    if (element.Row.Table.Columns[CSc2iDataConst.c_champIdVersion] != null)
                    {
                        nIdVersion = (int?)element.Row[CSc2iDataConst.c_champIdVersion, true];
                    }
                    else
                    {
                        nIdVersion = null;
                    }
                }
                CProfilUtilisateur profil = Profil;
                if (profil == null)
                {
                    if (Profil_Inclusion != null)
                    {
                        if (!Profil_Inclusion.ShouldApply(nIdVersion))
                        {
                            return;
                        }
                        profil = Profil_Inclusion.ProfilFils;
                    }
                }

                bool bApplique = false;
                //Si pas de relations EO sur l'utilisateur, on applique si
                //-Le profil n'est pas lié à une EO, ou si l'élément appartient à cette EO
                if (RelationsEntiteOrganisationnelles.Count == 0 || !profil.Affinable)
                {
                    if (profil.EntiteOrganisationnelle != null)
                    {
                        bApplique = strCodesEO.IndexOf("~" + profil.EntiteOrganisationnelle.CodeSystemeComplet) >= 0;
                    }
                    else
                    {
                        bApplique = true;//Pas d'EO, donc, on applique
                    }
                }

                if (profil.Affinable)
                {
                    foreach (CRelationUtilisateur_Profil_EO rel in RelationsEntiteOrganisationnelles)
                    {
                        if (rel.EntiteOrganisationnelle != null && strCodesEO.IndexOf("~" + rel.EntiteOrganisationnelle.CodeSystemeComplet) >= 0)
                        {
                            bApplique = true;
                            break;
                        }
                    }
                }
                if (bApplique)
                {
                    if (profil != null)
                    {
                        foreach (CProfilUtilisateur_Restriction relRes in profil.RelationsRestrictions)
                        {
                            CListeRestrictionsUtilisateurSurType lstRes = relRes.Restrictions.ListeRestrictions;
                            CRestrictionUtilisateurSurType       newRes = lstRes.GetRestriction(element.GetType());
                            restriction.Combine(newRes);
                        }
                    }
                    foreach (CRelationUtilisateur_Profil sousRel in RelationFilles)
                    {
                        sousRel.CompleteRestriction(element, restriction);
                    }
                }
            }
            finally
            {
                ((CObjetDonnee)element).VersionToReturn = originalVersion;
            }
        }
コード例 #8
0
        //--------------------------------------------------------------------------------
        /// <summary>
        /// Complete les restrictions pour un objet donné
        /// </summary>
        /// <param name="restriction"></param>
        public static void CompleteRestriction(IElementARestrictionsSpecifiques element, CRestrictionUtilisateurSurType restriction)
        {
            List <CRelationElement_RestrictionSpecifique> lst = GetRelationsRestrictions(element);

            if (lst.Count == 0)
            {
                return;
            }

            CContexteDonnee  contexte = element.ContexteDonnee;
            CSessionClient   session  = CSessionClient.GetSessionForIdSession(contexte.IdSession);
            IInfoUtilisateur info     = null;
            //TESTDBKEYTODO
            CDbKey keyUtilisateur = null;

            if (session != null)
            {
                info = session.GetInfoUtilisateur();
                if (info == null)
                {
                    return;
                }
                if (info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitAdministration) != null)
                {
                    return;
                }
                keyUtilisateur = info.KeyUtilisateur;
            }

            //Application des restrictions qui s'appliquent à tout le monde
            foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
            {
                if (rel.Applications.Count == 0)
                {
                    CListeRestrictionsUtilisateurSurType liste  = rel.GroupeRestriction.ListeRestrictions;
                    CRestrictionUtilisateurSurType       resTmp = liste.GetRestriction(element.GetType());
                    restriction.Combine(resTmp);
                    lst.Remove(rel);
                }
            }
            if (lst == null || lst.Count == 0 || info == null)
            {
                return;
            }


            CDonneesActeurUtilisateur user = new CDonneesActeurUtilisateur(contexte);

            if (user.ReadIfExists(keyUtilisateur))
            {
                CActeur acteur = user.Acteur;
                while (acteur != null)
                {
                    foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
                    {
                        CRelationElement_RestrictionSpecifique_Application app = rel.GetRelationFor(acteur);
                        if (app != null)
                        {
                            CListeRestrictionsUtilisateurSurType restrictions = rel.GroupeRestriction.ListeRestrictions;
                            CRestrictionUtilisateurSurType       resTmp       = restrictions.GetRestriction(element.GetType());
                            restriction.Combine(resTmp);
                            lst.Remove(rel);
                        }
                    }
                    acteur = acteur.ActeurParent;
                }
                acteur = user.Acteur;
                if (lst.Count == 0)
                {
                    return;
                }

                foreach (CGroupeActeur groupe in acteur.TousLesGroupesActeur)
                {
                    foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
                    {
                        if (rel.GetRelationFor(groupe) != null)
                        {
                            CListeRestrictionsUtilisateurSurType restrictions = rel.GroupeRestriction.ListeRestrictions;
                            CRestrictionUtilisateurSurType       resTmp       = restrictions.GetRestriction(element.GetType());
                            restriction.Combine(resTmp);
                            lst.Remove(rel);
                        }
                    }
                    if (lst.Count == 0)
                    {
                        return;
                    }
                }


                foreach (CRelationUtilisateur_Profil relProfil in user.RelationsProfils)
                {
                    foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
                    {
                        if (rel.GetRelationFor(relProfil.Profil) != null)
                        {
                            CListeRestrictionsUtilisateurSurType restrictions = rel.GroupeRestriction.ListeRestrictions;
                            CRestrictionUtilisateurSurType       resTmp       = restrictions.GetRestriction(element.GetType());
                            restriction.Combine(resTmp);
                            lst.Remove(rel);
                            if (lst.Count == 0)
                            {
                                return;
                            }
                        }
                    }
                }
            }
        }