private List <EntitySecurityDirectDTO> GetDirectSecurities(DR_Requester requester, OrganizationPostDTO post, IQueryable <EntitySecurityDirect> directSecurities, int entityID) { //var cachedItem = CacheManager.GetCacheManager().GetCachedItem(CacheItemType.EntityDirectSecurity, subjectID.ToString(), entityID.ToString()); //if (cachedItem != null) // return (cachedItem as List<EntitySecurityDirectDTO>); BizRoleSecurity bizRoleSecurity = new BizRoleSecurity(); List <EntitySecurityDirectDTO> result = new List <EntitySecurityDirectDTO>(); //////foreach (var directSecurity in directSecurities) //////{ ////// bool hasAnyOfSubjects = false; ////// foreach (var subject in directSecurity.TableDrivedEntityState.) ////// { ////// if (post.CurrentUserID == subject.SecuritySubjectID ////// || post.ID == subject.SecuritySubjectID ////// || post.OrganizationID == subject.SecuritySubjectID ////// || post.OrganizationTypeID == subject.SecuritySubjectID ////// || post.OrganizationTypeRoleTypeID == subject.SecuritySubjectID ////// || post.RoleTypeID == subject.SecuritySubjectID ////// ) ////// hasAnyOfSubjects = true; ////// } ////// if (directSecurity.SecuritySubjectOperator == null || (InORNotIn)directSecurity.SecuritySubjectOperator == InORNotIn.In) ////// { ////// if (hasAnyOfSubjects == true) ////// result.Add(bizRoleSecurity.ToEntitySecurityDirectDTO(requester, directSecurity, true)); ////// } ////// else ////// { ////// if (hasAnyOfSubjects == false) ////// result.Add(bizRoleSecurity.ToEntitySecurityDirectDTO(requester, directSecurity, true)); ////// } //////} ////////var subjectDisrectSecurities = directSecurities.Where(x => x.SecuritySubjectID == subjectID);// && x.Mode == (short)securityMode); ////////List<EntitySecurityDirectDTO> result = new List<EntitySecurityDirectDTO>(); ////////foreach (var item in subjectDisrectSecurities) ////////{ //////// result.Add(bizRoleSecurity.ToEntitySecurityDirectDTO(requester, item, true)); ////////} //////// CacheManager.GetCacheManager().AddCacheItem(result, CacheItemType.EntityDirectSecurity, subjectID.ToString(), entityID.ToString()); return(result); }
public List <EntitySecurityDirectDTO> GetGeneralEntitySecurityItems(DR_Requester requester, int entityID) { var cachedItem = CacheManager.GetCacheManager().GetCachedItem(CacheItemType.EntityGeneralDirectSecurity, entityID.ToString()); // if (cachedItem != null) // return (cachedItem as List<EntitySecurityDirectDTO>); BizRoleSecurity bizRoleSecurity = new BizRoleSecurity(); List <EntitySecurityDirectDTO> result = new List <EntitySecurityDirectDTO>(); //////using (var context = new MyProjectEntities()) //////{ ////// var disrectSecurities = context.EntitySecurityDirect.Where(x => x.TableDrivedEntityID == entityID && x.Mode == (short)DataDirectSecurityMode.FetchData); ////// var subjectDisrectSecurities = disrectSecurities.Where(x => !x.EntitySecurityDirectSecuritySubject.Any()); ////// foreach (var item in subjectDisrectSecurities) ////// { ////// result.Add(bizRoleSecurity.ToEntitySecurityDirectDTO(requester, item, true)); ////// } //////} CacheManager.GetCacheManager().AddCacheItem(result, CacheItemType.EntityGeneralDirectSecurity, entityID.ToString()); return(result); }
//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); }