public IEnumerable <SubdivisionPermissionNode> GetAllSubdivisionEntityPermissions(IUnitOfWork uow, int subdivisionId, IPermissionExtensionStore permissionExtensionStore) { var basePermission = uow.Session.QueryOver <EntitySubdivisionOnlyPermission>() .Where(x => x.Subdivision.Id == subdivisionId) .List(); foreach (var item in basePermission) { var node = new SubdivisionPermissionNode(); node.EntitySubdivisionOnlyPermission = item; node.TypeOfEntity = item.TypeOfEntity; node.EntityPermissionExtended = new List <EntitySubdivisionPermissionExtended>(); foreach (var extension in permissionExtensionStore.PermissionExtensions) { EntitySubdivisionPermissionExtended permissionExtendedAlias = null; var permission = uow.Session.QueryOver(() => permissionExtendedAlias) .Where(x => x.Subdivision.Id == subdivisionId) .And(() => permissionExtendedAlias.PermissionId == extension.PermissionId) .And(x => x.TypeOfEntity.Id == node.TypeOfEntity.Id) .Take(1)?.List()?.FirstOrDefault(); if (permission != null) { node.EntityPermissionExtended.Add(permission); continue; } permission = new EntitySubdivisionPermissionExtended(); permission.IsPermissionAvailable = null; permission.PermissionId = extension.PermissionId; permission.Subdivision = item.Subdivision; permission.TypeOfEntity = item.TypeOfEntity; node.EntityPermissionExtended.Add(permission); } yield return(node); } }
public void AddPermission(TypeOfEntity entityNode) { if (entityNode == null) { return; } ObservableTypeOfEntitiesList.Remove(entityNode); SubdivisionPermissionNode savedPermission; var foundOriginalPermission = originalPermissionList.FirstOrDefault(x => x.TypeOfEntity == entityNode); if (foundOriginalPermission == null) { savedPermission = new SubdivisionPermissionNode(); savedPermission.EntitySubdivisionOnlyPermission = new EntitySubdivisionOnlyPermission { Subdivision = subdivision, TypeOfEntity = entityNode }; savedPermission.EntityPermissionExtended = new List <EntitySubdivisionPermissionExtended>(); foreach (var item in ExtensionStore.PermissionExtensions) { var node = new EntitySubdivisionPermissionExtended(); node.Subdivision = subdivision; node.TypeOfEntity = entityNode; node.PermissionId = item.PermissionId; savedPermission.EntityPermissionExtended.Add(node); } savedPermission.TypeOfEntity = entityNode; PermissionListViewModel.PermissionsList.Add(savedPermission); } else { savedPermission = foundOriginalPermission; PermissionListViewModel.PermissionsList.Add(savedPermission); } }