/// <summary> /// Add default permissions to an object. /// </summary> /// <param name="dataModel">The data model.</param> /// <param name="transaction">The current transaction.</param> /// <param name="organizationId">The TenentId of the organization where the scan should start (eg. where the entity is).</param> /// <param name="entityId">The entityId of the object to modify.</param> ///<param name="tenantId">The root TenantId for which all the records will be created for</param> public static void AddGroupPermissions(DataModel dataModel, DataModelTransaction transaction, Guid organizationId, Guid entityId, Guid tenantId) { TenantRow organizationRow = DataModel.Tenant.TenantKey.Find(organizationId); RightsHolderRow[] rightsHolders; TenantTreeRow[] tenantTreeRows; if (organizationRow == null) { throw new FaultException <RecordNotFoundFault>( new RecordNotFoundFault("Organization", new object[] { organizationId }), "The organization has been deleted."); } organizationRow.AcquireReaderLock(transaction); tenantTreeRows = organizationRow.GetTenantTreeRowsByFK_Tenant_TenantTree_ChildId(); rightsHolders = organizationRow.GetRightsHolderRows(); organizationRow.ReleaseLock(transaction.TransactionId); foreach (RightsHolderRow rightsHolderRow in rightsHolders) { GroupRow[] groupRows; rightsHolderRow.AcquireReaderLock(transaction); groupRows = rightsHolderRow.GetGroupRows(); rightsHolderRow.ReleaseLock(transaction.TransactionId); if (groupRows.Length > 0) { Guid groupId; GroupRow group = groupRows[0]; GroupTypeRow groupType; group.AcquireReaderLock(transaction); groupId = group.GroupId; groupType = group.GroupTypeRow; group.ReleaseReaderLock(transaction.TransactionId); groupType.AcquireReaderLock(transaction); if (groupType.GroupTypeCode == GroupType.ExchangeAdmin || groupType.GroupTypeCode == GroupType.FluidTradeAdmin || groupType.GroupTypeCode == GroupType.SiteAdmin) { dataModel.CreateAccessControl( Guid.NewGuid(), AccessRightMap.FromCode(AccessRight.FullControl), entityId, groupId, tenantId); } } } foreach (TenantTreeRow tenantTreeRow in tenantTreeRows) { Guid parentId; tenantTreeRow.AcquireReaderLock(transaction); parentId = tenantTreeRow.ParentId; tenantTreeRow.ReleaseLock(transaction.TransactionId); AddGroupPermissions(dataModel, transaction, parentId, entityId, tenantId); } }