public bool TryChangeEntityState(int entityInfoId, int entityOrganizationId, int entityTransitionId, out EntityStateChangeViewModel entityStateChangeViewModel) { if (!TryChangeEntityState(entityInfoId, entityOrganizationId, entityTransitionId)) { entityStateChangeViewModel = null; return(false); } EntityStateTransition entityStateTransition = _entityRepository.GetEntityStateTransition(entityTransitionId); EntityOrganization entityOrganization = _entityRepository.GetEntityOrganization(entityInfoId, entityOrganizationId); entityStateChangeViewModel = new EntityStateChangeViewModel { EntityInfoId = entityOrganization.EntityInfoId, OrganizationId = entityOrganization.OrganizationId, EntityTransitions = GetAccesibleEntityTransitionsFrom(entityStateTransition.EntityStateToId, entityOrganization.EntityTypeId, entityOrganization.OrganizationId), EntityStateChanged = new EntityStateChangedViewModel { EntityStateId = entityStateTransition.EntityStateToId, EntityStateName = _styleContext.GetTranslation(entityStateTransition.EntityStateTo.NameCode) } }; _entityRepository.UnitOfWork.SaveChanges(); return(true); }
private EntityStateTransition ChangeEntityState(EntityInfo entityInfo, int entityStateTransitionId, int?organizationId, int?userId) { EntityStateTransition actualTransition = null; EntityOrganization entityOrganization = GetEntityOrganization(entityInfo, organizationId); if (entityOrganization != null) { EntityState entityState = _entityRepository.GetEntityState(entityOrganization.EntityStateId); EntityStateTransition transition = entityState.TransitionsFrom.SingleOrDefault(t => t.EntityStateToId == entityStateTransitionId); if (userId == null && _userContext.IsAuthenticated) { userId = _userContext.User.Id; } if (transition != null) { AddEntityProgress( entityInfo, new EntityProgress { UserId = userId, DateTime = DateTime.UtcNow, OrganizationId = entityOrganization.OrganizationId, EntityStateBeforeId = transition.EntityStateFromId, EntityStateAfterId = transition.EntityStateToId } ); entityOrganization.EntityStateId = transition.EntityStateToId; actualTransition = transition; } } return(actualTransition); }
public bool TryChangeEntityState(EntityOrganization entityOrganization, int entityTransitionId, int?userId = null) { EntityStateTransition entityTransition = _entityRepository.GetEntityStateTransition(entityTransitionId); if (entityOrganization == null || entityTransition == null || entityTransition.EntityStateFromId != entityOrganization.EntityStateId || !_userContext.HasOrganizationStateTransitionAccess(entityOrganization.OrganizationId, entityOrganization.EntityTypeId, entityTransition.Id)) { return(false); } entityOrganization.EntityStateId = entityTransition.EntityStateToId; if (userId == null && _userContext.IsAuthenticated) { userId = _userContext.User.Id; } _entityRepository.Add(new EntityProgress { EntityInfoId = entityOrganization.EntityInfoId, OrganizationId = entityOrganization.OrganizationId, UserId = userId, DateTime = DateTime.UtcNow, EntityStateBeforeId = entityTransition.EntityStateFromId, EntityStateAfterId = entityTransition.EntityStateToId }); return(true); }
private bool HasAccess(Access access, IDictionary <int, EntityTypeAccessExt> entityTypeAccess) { if (access.EntityTypeId == null) { return(false); } if (!entityTypeAccess.ContainsKey(access.EntityTypeId.Value)) { return(false); } EntityTypeAccessExt entityTypeAccessExt = entityTypeAccess[access.EntityTypeId.Value]; if (access.EntityStateId != null) { return(entityTypeAccessExt.EntityStateAccess.ContainsKey(access.EntityStateId.Value) && entityTypeAccessExt.EntityStateAccess[access.EntityStateId.Value] >= access.AccessTypeId); } if (access.EntityStateTransitionId != null) { EntityStateTransition transition = _entityRepository.GetEntityStateTransition(access.EntityStateTransitionId.Value); if (transition == null) { return(false); } int entityStateId = transition.EntityStateFromId ?? transition.EntityStateToId; return(entityTypeAccessExt.EntityStateTransitionAccess.Contains(transition.Id) && entityTypeAccessExt.EntityStateAccess.ContainsKey(entityStateId) && entityTypeAccessExt.EntityStateAccess[entityStateId] == Dom.AccessType.ReadWrite); } if (access.AccessTypeId == Dom.AccessType.Create) { if (entityTypeAccessExt.AccessTypeId >= Dom.AccessType.ReadWrite) { IEnumerable <EntityStateTransition> entityStateTransitions = _entityRepository.GetInitialEntityStateTransitions(access.EntityTypeId.Value); foreach (EntityStateTransition entityStateTransition in entityStateTransitions) { if (entityTypeAccessExt.EntityStateTransitionAccess.Contains(entityStateTransition.Id) && entityTypeAccessExt.EntityStateAccess.ContainsKey(entityStateTransition.EntityStateToId) && entityTypeAccessExt.EntityStateAccess[entityStateTransition.EntityStateToId] == Dom.AccessType.ReadWrite) { return(true); } } } } else if (entityTypeAccessExt.AccessTypeId >= access.AccessTypeId) { return(true); } return(false); }