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); }
/// /////////////////////////////////////////////////// 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); }
///////////////////////////////////////////////////////////////////////// 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); } }
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); }
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); }
//-------------------------------------------------------------------------------- /// <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); }
//////////////////////////////////////////////// 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; } }
//-------------------------------------------------------------------------------- /// <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; } } } } } }