//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));
            }
        }
Ejemplo n.º 2
0
 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);
                }
            }
        }