/// <summary> /// Impostazione / rimozione della visibilità di un singolo nodo di titolario per un ruolo /// </summary> /// <param name="nodoTitolario"></param> /// <param name="ruoloTitolario"> /// Ruolo cui deve essere associata / rimossa la visibilità verso il nodo titolario /// </param> /// <returns></returns> public bool SetAclRuoloNodoTitolario(OrgNodoTitolario nodoTitolario, OrgRuoloTitolario ruoloTitolario) { bool retValue = false; try { // Reperimento ACL associate al nodo di titolario SOLO per il ruolo richiesto CustomServices.AclDefinition aclData = AclHelper.getAclDefinition(nodoTitolario.CodiceAmministrazione, nodoTitolario.ID, ObjectTypes.NODO_TITOLARIO); List <CustomServices.AclEntry> entries = new List <CustomServices.AclEntry>(aclData.entries); //AclHelper.addBasicPermit(entries, TypeGruppo.NormalizeGroupName(ruoloTitolario.Codice), Permission.DELETE); AclHelper.addBasicPermit(entries, TypeGruppo.NormalizeGroupName(DocsPaQueryHelper.getCodiceRuoloFromIdGroups(ruoloTitolario.ID)), Permission.DELETE); aclData.entries = entries.ToArray(); CustomServices.IAclService aclService = DctmServiceFactory.GetCustomServiceInstance <CustomServices.IAclService>(UserManager.ImpersonateSuperUser()); if (ruoloTitolario.Associato) { // Impostazione visibilità del ruolo aclService.UpdateWithGrant(aclData); } else { // Rimozione visibilità del ruolo aclService.Revoke(aclData); } retValue = true; } catch (Exception ex) { retValue = false; logger.Debug("Errore in Documentum.SetAclRuoloNodoTitolario: " + ex.ToString()); } return(retValue); }
/// <summary> /// /// </summary> /// <param name="ruolo"></param> /// <returns></returns> public static string GetGroupName(DocsPaVO.amministrazione.OrgRuolo ruolo) { return(NormalizeGroupName(DocsPaQueryHelper.getCodiceRuoloFromIdGroups(ruolo.IDGruppo))); }
/// <summary> /// /// </summary> /// <param name="ruolo"></param> /// <returns></returns> public static string GetGroupName(DocsPaVO.utente.Ruolo ruolo) { return(NormalizeGroupName(DocsPaQueryHelper.getCodiceRuoloFromIdGroups(ruolo.idGruppo))); }
/// <summary> /// Handler dell'evento di avvenuta trasmissione di un documento / fascicolo /// </summary> /// <param name="trasmissione"></param> /// <param name="infoSecurity"> /// Oggetto contenente i metadati relativi alla tipologia di ACL /// impostata nella trasmissione di un documento / fascicolo /// </param> public void TrasmissioneCompletataEventHandler(DocsPaVO.trasmissione.Trasmissione trasmissione, DocsPaVO.trasmissione.infoSecurity[] infoSecurityList) { // In caso di trasmissione con cessione diritti, // viene modificata l'ownership del documento / fascicolo trasmesso // se il documento era di proprietà del cedente if (trasmissione.cessione != null && trasmissione.cessione.docCeduto) { // imposta l'Ownership solo se è stato impostato il nuovo utente che diventerà proprietario del doc/fas. // Questo avviene quando si stanno cedendo i diritti di proprietà (P). // Se si stanno cedendo i diritti acquisiti (A o T o F) questo blocco viene saltato. if (trasmissione.cessione.idPeopleNewPropr != null && trasmissione.cessione.idPeopleNewPropr != "") { IQueryService queryService = DctmServiceFactory.GetServiceInstance <IQueryService>(UserManager.ImpersonateSuperUser()); // Reperimento nome utente e ruolo cui viene impostata l'ownership del documento string ownerUser = DocsPaObjectTypes.TypeUtente.NormalizeUserName(DocsPaQueryHelper.getCodiceUtente(trasmissione.cessione.idPeopleNewPropr)); if (trasmissione.tipoOggetto == DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO) { string ownerRole = DocsPaObjectTypes.TypeGruppo.NormalizeGroupName(DocsPaQueryHelper.getCodiceRuoloFromIdGroups(trasmissione.cessione.idRuoloNewPropr)); Dfs4DocsPa.setOwnershipDocumento(trasmissione.infoDocumento.idProfile, ownerUser, ownerRole, queryService); } else if (trasmissione.tipoOggetto == DocsPaVO.trasmissione.TipoOggetto.FASCICOLO) { Dfs4DocsPa.setOwnershipFascicolo(trasmissione.infoFascicolo.idFascicolo, ownerUser, queryService); } } } CustomServices.AclDefinition aclData = null; if (trasmissione.tipoOggetto == DocsPaVO.trasmissione.TipoOggetto.DOCUMENTO) { // Reperimento della lista delle ACL aggiornata nella tabella security di docspa aclData = Dfs4DocsPa.getAclDefinition(trasmissione.infoDocumento.docNumber, DocsPaObjectTypes.ObjectTypes.DOCUMENTO, this.InfoUtente); // Aggiornamento ACL in DCTM, con le credenziali di superuser CustomServices.IAclService aclService = DctmServiceFactory.GetCustomServiceInstance <CustomServices.IAclService>(UserManager.ImpersonateSuperUser()); aclService.ClearAndGrant(aclData, trasmissione.infoDocumento.idProfile); } else if (trasmissione.tipoOggetto == DocsPaVO.trasmissione.TipoOggetto.FASCICOLO) { // Reperimento della lista delle ACL aggiornata nella tabella security di docspa aclData = Dfs4DocsPa.getAclDefinition(trasmissione.infoFascicolo.idFascicolo, DocsPaObjectTypes.ObjectTypes.FASCICOLO, this.InfoUtente); // Aggiornamento ACL in DCTM, con le credenziali di superuser CustomServices.IAclService aclService = DctmServiceFactory.GetCustomServiceInstance <CustomServices.IAclService>(UserManager.ImpersonateSuperUser()); aclService.ClearAndGrant(aclData, trasmissione.infoFascicolo.idFascicolo); string[] idProfiles = DocsPaQueryHelper.getDocumentiInFascicolo(trasmissione.infoFascicolo.idFascicolo); //PORKING: nonè necessario farlo ora, perchè le aCL di Documenti vengono rimappate se necesario quando gli utenti o i ruoli faranno // GetDettaglio con il metedo RefreshAcl if (idProfiles != null && idProfiles.Length < 20) { foreach (string idProfile in idProfiles) { // Aggiornamento delle ACL per tutti i documenti nel fascicolo (compresi eventuali sottofascicoli) //DCTM è usato solo con PITRE e in PITRE storicamente il idprofile è sempre uguale a docnumber quindi posso togliere questa query //DocsPaQueryHelper.getDocNumber(idProfile) è passare in input direttamente idProfile al metodo getAclDefinition aclData = Dfs4DocsPa.getAclDefinition(idProfile, DocsPaObjectTypes.ObjectTypes.DOCUMENTO, this.InfoUtente); aclService.ClearAndGrant(aclData, idProfile); } } } }
/// <summary> /// Verifica se un utente è contenuto in un gruppo DCTM /// </summary> /// <param name="idGroup"></param> /// <param name="idPeople"></param> /// <returns></returns> public bool ContainsGroupUserById(string idGroup, string idPeople) { return(this.ContainsGroupUser(DocsPaQueryHelper.getCodiceRuoloFromIdGroups(idGroup), DocsPaQueryHelper.getCodiceUtente(idPeople))); }