internal void UpdatePOAMask(Guid poaId, int accessRightsMask) { var existing = db.GetEntity("principalobjectaccess", poaId); existing["accessrightsmask"] = existing.GetAttributeValue <int>("accessrightsmask") | accessRightsMask; db.Update(existing); }
//TODO: update to also take in cascading filtering on Assign, Delete, Merge, reparent, rollup internal Entity GetDbEntityWithRelatedEntities(EntityReference reference, EntityRole primaryEntityRole, EntityReference userRef, CascadeSelection cascadeSelection = null, params Relationship[] relations) { var entity = db.GetEntityOrNull(reference); if (entity == null) { return(null); } var metadata = this.metadata.EntityMetadata.GetMetadata(entity.LogicalName); if (entity.RelatedEntities.Count() > 0) { var clone = entity.CloneEntity(metadata, new ColumnSet(true)); db.Update(clone); entity = clone; } var relationQuery = new RelationshipQueryCollection(); var relationsMetadata = primaryEntityRole == EntityRole.Referenced ? metadata.OneToManyRelationships : metadata.ManyToOneRelationships; if (cascadeSelection != null) { relationsMetadata.Where(x => CascadeCompare(x.CascadeConfiguration, cascadeSelection)); } if (relations.Any()) { relationsMetadata = relationsMetadata.Join(relations, x => x.SchemaName, y => y.SchemaName, (r1, r2) => r1).ToArray(); } relationQuery.AddRange( relationsMetadata .Select(relationshipMeta => { var rel = new Relationship() { SchemaName = relationshipMeta.SchemaName, PrimaryEntityRole = primaryEntityRole }; var query = new QueryExpression() { EntityName = primaryEntityRole == EntityRole.Referenced ? relationshipMeta.ReferencingEntity : relationshipMeta.ReferencedEntity, ColumnSet = new ColumnSet(true) }; return(new KeyValuePair <Relationship, QueryBase>(rel, query)); })); if (cascadeSelection == null) { var relationShipManyMetadata = metadata.ManyToManyRelationships; if (relations.Any()) { relationShipManyMetadata = relationShipManyMetadata.Join(relations, x => x.SchemaName, y => y.SchemaName, (r1, r2) => r1).ToArray(); } relationQuery.AddRange(relationShipManyMetadata .Select(relationshipMeta => { var rel = new Relationship() { SchemaName = relationshipMeta.SchemaName }; var query = new QueryExpression(relationshipMeta.IntersectEntityName) { ColumnSet = new ColumnSet(true) }; return(new KeyValuePair <Relationship, QueryBase>(rel, query)); })); } AddRelatedEntities(entity, relationQuery, userRef); return(entity); }