//public FinalEntitySecurityDirects GetFinalEntitySecurityDirects(DR_Requester requester, int entityID, DataDirectSecurityFinalMode mode, bool withDetails) //{ // FinalEntitySecurityDirects result = new FinalEntitySecurityDirects(); // using (var context = new MyProjectEntities()) // { // IQueryable<EntitySecurityDirect> directs = context.EntitySecurityDirect.Where(x => x.TableDrivedEntityID == entityID); // if (mode == DataDirectSecurityFinalMode.FetchData) // directs = directs.Where(x => x.Mode == (short)DataDirectSecurityMode.FetchData); // else if (mode == DataDirectSecurityFinalMode.ReadonlyData) // directs = directs.Where(x => x.Mode == (short)DataDirectSecurityMode.ReadonlyData); // if (directs.Any()) // { // } // else // { // } // } //} public bool EntityHasDirectSecurities(DR_Requester requester, int entityID, DataDirectSecurityMode mode) { using (var context = new MyProjectEntities()) { return(context.EntitySecurityDirect.Any(x => x.TableDrivedEntityID == entityID && x.Mode == (short)mode)); } }
public bool EntityHasDirectSecurities(DR_Requester requester, int entityID, DataDirectSecurityMode mode) { return(bizRoleSecurity.EntityHasDirectSecurities(requester, entityID, mode)); }
//public void UpdateEntitySecurityInDirect(EntitySecurityInDirectDTO message) //{ // using (var projectContext = new DataAccess.MyProjectEntities()) // { // var dbItem = projectContext.EntitySecurityInDirect.FirstOrDefault(x => x.ID == message.ID); // if (dbItem == null) // { // dbItem = new DataAccess.EntitySecurityInDirect(); // projectContext.EntitySecurityInDirect.Add(dbItem); // } // dbItem.Mode = (short)message.Mode; // dbItem.TableDrivedEntityID = message.TableDrivedEntityID; // dbItem.EntityRelationshipTailID = message.RelationshipTailID; // projectContext.SaveChanges(); // } //} public EntityStateDTO GetAppliableConditionsBySecuritySubject(DR_Requester requester, int entityID, DataDirectSecurityMode mode) { //var cachedItem = CacheManager.GetCacheManager().GetCachedItem(CacheItemType.ConditionalPermission, securitySubjectID.ToString(), entityID.ToString()); //if (cachedItem != null) // return (cachedItem as List<ConditionalPermissionDTO>); //List<int> organizationTypeIDs = new List<int>(); //List<int> organizationIDs = new List<int>(); //List<int> roleTypeIDs = new List<int>(); //List<int> orgTypeRoleTypeIDs = new List<int>(); //Tuple<EntitySecurityInDirectDTO, List<EntitySecurityDirectDTO>> result;= new Tuple<EntitySecurityInDirectDTO, List<EntitySecurityDirectDTO>>(); BizRoleSecurity bizRoleSecurity = new BizRoleSecurity(); List <EntityStateConditionDTO> entityStateConditions = new List <EntityStateConditionDTO>(); // EntitySecurityInDirectDTO indisrectSecurityDTO = null; // EntityStateDTO entityState = null; using (var context = new MyProjectEntities()) { var directSecurityEntityID = entityID; var targetEntityDisrectSecurity = GetEntitySecurityDirectByEntityID(requester, entityID, mode, true); if (targetEntityDisrectSecurity == null) { //var indisrectSecurity = GetEntitySecurityInDirect(context.EntitySecurityInDirect.FirstOrDefault(x => x.TableDrivedEntityID == entityID); //if (indisrectSecurity == null) // return null; //else //{ // indisrectSecurityDTO = bizRoleSecurity.ToEntitySecurityInDirectDTO(indisrectSecurity, true); // var targetEntity = indisrectSecurity.EntityRelationshipTail.TableDrivedEntity; // directSecurityEntityID = targetEntity.ID; // targetEntityDisrectSecurity = context.EntitySecurityDirect.FirstOrDefault(x => x.TableDrivedEntityID == targetEntity.ID && x.Mode == (short)DataDirectSecurityMode.FetchData); //} return(null); } // entityState = bizEntityState.ToEntityStateDTO(requester, targetEntityDisrectSecurity.TableDrivedEntityState, true); foreach (var condition in targetEntityDisrectSecurity.EntityState.StateConditions.ToList()) { if (ConditionSecuritySubjectIsValid(requester, condition)) { GetConditionDTOWithValues(requester, condition); } else { targetEntityDisrectSecurity.EntityState.StateConditions.Remove(condition); } } return(targetEntityDisrectSecurity.EntityState); //var organizationPosts = GetDBOrganizationPosts(context, requester); //BizOrganization bizOrganization = new BizOrganization(); //foreach (var post in organizationPosts) //{ // // List<EntitySecurityDirectDTO> listDirectSecuritiesForPost = new List<EntitySecurityDirectDTO>(); // var postDto = requester.Posts.FirstOrDefault(x => x.ID == post.ID); // if (postDto == null) // postDto = bizOrganization.GetOrganizationPost(post.ID); // var postDisrectSecurities = GetDirectSecurities(requester, postDto, targetEntityDisrectSecurities, directSecurityEntityID); //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.Organization.SecuritySubject.ID)); //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.SecuritySubject.ID)); //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.OrganizationType.SecuritySubject.ID)); //postDisrectSecurities.AddRange(GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.RoleType.SecuritySubject.ID)); //منطق اینجا رو نفهمیدم غیر فعال شد. بجاش بالا همه دسترسی ها تجمیع می شوند //////if (postDisrectSecurities.Any()) ////// listDirectSecuritiesForPost.AddRange(postDisrectSecurities); //////else //////{ ////// var orgTypeRoleTypeDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.SecuritySubject.ID); ////// var organizationDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.Organization.SecuritySubject.ID); ////// if (orgTypeRoleTypeDisrectSecurities.Any()) ////// { ////// //اینجا دسترسی های موازی با هم جمع میشوند زیرا معلوم نیست بروی کدام آبجکت دارند اعمال میشوند و تصمیم گیری در مورد تداخل دسترسی بروی یک آبجکت به کلاینت واگذار میشود ////// listDirectSecuritiesForPost.AddRange(orgTypeRoleTypeDisrectSecurities); ////// listDirectSecuritiesForPost.AddRange(organizationDisrectSecurities); ////// } ////// else ////// { ////// var roleTypeDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.RoleType.SecuritySubject.ID); ////// if (organizationDisrectSecurities.Any()) ////// { ////// listDirectSecuritiesForPost.AddRange(organizationDisrectSecurities); ////// listDirectSecuritiesForPost.AddRange(roleTypeDisrectSecurities); ////// } ////// else ////// { ////// var organizationTypeDisrectSecurities = GetDirectSecurities(requester, disrectSecurities, directSecurityEntityID, post.OrganizationType_RoleType.OrganizationType.SecuritySubject.ID); ////// listDirectSecuritiesForPost.AddRange(organizationTypeDisrectSecurities); ////// listDirectSecuritiesForPost.AddRange(roleTypeDisrectSecurities); ////// } ////// } //////} //if (listDirectSecuritiesForPost.Any()) //{ //اونهای که سابجکت نال دارند و عمومی هستند //var generalSecurityItems = GetGeneralEntitySecurityItems(requester, directSecurityEntityID); //if (generalSecurityItems.Any()) // postDisrectSecurities.AddRange(generalSecurityItems); //foreach (var generalSecurityItem in generalSecurityItems) //{ // foreach (var directSecurityItem in listDirectSecuritiesForPost) // { // directSecurityItem.Conditions.AddRange(generalSecurityItem.Conditions); // } //} //} //listDirectSecuritiesForPost.AddRange(generalSecurityItems); // allPostsDirectSecurities.Add(new PostEntityDataSecurityItems(postDto, postDisrectSecurities)); //} } //CacheManager.GetCacheManager().AddCacheItem(result, CacheItemType.ConditionalPermission, securitySubjectID.ToString(), entityID.ToString()); // return new EntityDataSecurityItems(entityState, indisrectSecurityDTO, entityStateConditions); }
//public bool EntityHasInDirectSecurityWithDirectSecurity(DR_Requester requester, int entityID, DataDirectSecurityMode mode) //{ // using (var context = new MyProjectEntities()) // { // if (mode == DataDirectSecurityMode.FetchData) // { // if (context.EntitySecurityInDirect.Any(x => x.TableDrivedEntityID == entityID && // (x.Mode == (short)DataInDirectSecurityMode.OnlyFetchData || x.Mode == (short)DataInDirectSecurityMode.Full))) // { // var indirect = context.EntitySecurityInDirect.First(x => x.TableDrivedEntityID == entityID && // (x.Mode == (short)DataInDirectSecurityMode.OnlyFetchData || x.Mode == (short)DataInDirectSecurityMode.Full)); // return context.EntitySecurityDirect.Any(x => x.TableDrivedEntityID == indirect.EntityRelationshipTail.TargetEntityID && x.Mode == (short)mode); // } // else // return false; // } // else if (mode == DataDirectSecurityMode.ReadonlyData) // { // if (context.EntitySecurityInDirect.Any(x => x.TableDrivedEntityID == entityID && x.Mode == (short)DataInDirectSecurityMode.Full)) // { // var indirect = context.EntitySecurityInDirect.First(x => x.TableDrivedEntityID == entityID && x.Mode == (short)DataInDirectSecurityMode.Full); // return context.EntitySecurityDirect.Any(x => x.TableDrivedEntityID == indirect.EntityRelationshipTail.TargetEntityID && x.Mode == (short)mode); // } // else // return false; // } // } // return false; //} //public bool EntityHasInDirectSecurities(DR_Requester requester, int entityID) //{ // using (var context = new MyProjectEntities()) // { // if (context.EntitySecurityInDirect.Any(x => x.TableDrivedEntityID == entityID)) // { // var indirect = context.EntitySecurityInDirect.First(x => x.TableDrivedEntityID == entityID); // return context.EntitySecurityDirect.Any(x => x.TableDrivedEntityID == indirect.EntityRelationshipTail.TargetEntityID); // } // else // return false; // } //} public EntitySecurityDirectDTO GetEntitySecurityDirectByEntityID(DR_Requester requester, int entityID, DataDirectSecurityMode mode, bool withDetails) { EntitySecurityDirectDTO result = new EntitySecurityDirectDTO(); using (var projectContext = new DataAccess.MyProjectEntities()) { var item = projectContext.EntitySecurityDirect.FirstOrDefault(x => x.TableDrivedEntityID == entityID && x.Mode == (short)mode); if (item != null) { return(ToEntitySecurityDirectDTO(requester, item, withDetails)); } else { return(null); } } }