Ejemplo n.º 1
0
        public async Task <IActionResult> GetResourceOfGroup([FromBody] UserPerModel model)
        {
            List <AdResourcePermission> result = new List <AdResourcePermission>();

            try
            {
                var listPermissionAll = await _context.AdPermissions.Include(i => i.Function).ThenInclude(i => i.Parent).Where(x => x.ApplicationCode == model.AppCode && x.GroupUserCode == model.GroupCode && x.RoleId == model.RoleId).ToListAsync();

                var listPermissionDefault = listPermissionAll.Where(x => x.UserId == null).ToList();
                var listPermissionUser    = listPermissionAll.Where(x => x.UserId == model.UserId).ToList();
                var countPermissionUser   = listPermissionUser.Count;

                if (listPermissionDefault.Count > 0)
                {
                    var groupFunction       = listPermissionDefault.GroupBy(g => g.Function).OrderBy(o => o.Key.ParentCode).ThenBy(t => t.Key.FunctionCode).ToList();
                    var groupFunctionParent = listPermissionDefault.GroupBy(g => g.Function.ParentCode).OrderBy(o => o.Key).ToList();
                    if (groupFunctionParent.Count > 0)
                    {
                        var listFunctionAll = await _context.AdFunctions.Where(x => groupFunctionParent.Any(y => y.Key == x.FunctionCode || y.Key == x.ParentCode)).ToListAsync();

                        var listPrivilege = await _context.AdPrivileges.Include(x => x.Function).Include(x => x.Resource).Where(x => x.Resource.Status && groupFunctionParent.Any(y => y.Key == x.FunctionCode || y.Key == x.Function.ParentCode)).ToListAsync();

                        foreach (var funcParent in groupFunctionParent)
                        {
                            var function = listFunctionAll.First(x => (funcParent.Key == null && funcParent.Any(y => y.FunctionCode == x.FunctionCode)) || x.FunctionCode == funcParent.Key);//funcParent.Key;
                            // Get all resource of function
                            var listPrivilegeOfFunction = listPrivilege.Where(x => x.FunctionCode == function.FunctionCode).ToList();
                            if (listPrivilegeOfFunction.Count > 0)
                            {
                                var defaultFunction = new AdResourcePermission();
                                defaultFunction.Id            = function.FunctionId;
                                defaultFunction.Code          = function.FunctionCode;
                                defaultFunction.Title         = function.Title;
                                defaultFunction.Description   = function.Description;
                                defaultFunction.Api           = string.Empty;
                                defaultFunction.Path          = string.Empty;
                                defaultFunction.Ord           = function.Ord;
                                defaultFunction.ParentCode    = function.ParentCode;
                                defaultFunction.FunctionCode  = function.FunctionCode;
                                defaultFunction.FunctionName  = function.Title;
                                defaultFunction.HasPermission = true;
                                defaultFunction.IsFunction    = true;
                                result.Add(defaultFunction); // Add first function

                                var query = from pr in listPrivilegeOfFunction
                                            join gfr in funcParent on pr.ResourceCode equals gfr.ResourceCode into grpFunc
                                            from fr in grpFunc.DefaultIfEmpty()
                                            let perUser = listPermissionUser.FirstOrDefault(x => x.FunctionCode == pr.FunctionCode && x.ResourceCode == pr.ResourceCode)
                                                          select new AdResourcePermission
                                {
                                    Id            = pr.PrivilegeId,
                                    Code          = pr.Resource.ResourceCode,
                                    Title         = pr.Resource.Title,
                                    Description   = pr.Resource.Description,
                                    Api           = pr.Resource.Api,
                                    Path          = pr.Resource.Path,
                                    Ord           = pr.Resource.Ord,
                                    Style         = pr.Resource.Style,
                                    Scope         = pr.Resource.Scope,
                                    ParentCode    = pr.Resource.ParentCode,
                                    FunctionCode  = pr.FunctionCode,
                                    FunctionName  = pr.Function.Title,
                                    ExpiredDate   = perUser?.ExpiredDate,
                                    IsFunction    = false,
                                    HasPermission = (countPermissionUser == 0 && fr != null) || perUser != null
                                };
                                result.AddRange(query);
                            }
                            // Get all function child and resource
                            var groupFunctionChild = listFunctionAll.Where(x => x.ParentCode == function.FunctionCode).ToList();
                            if (groupFunctionChild.Count > 0)
                            {
                                foreach (var funcChild in groupFunctionChild)
                                {
                                    function = funcChild;
                                    // Get all resource of function
                                    listPrivilegeOfFunction = listPrivilege.Where(x => x.FunctionCode == function.FunctionCode).ToList();
                                    if (listPrivilegeOfFunction.Count > 0)
                                    {
                                        var defaultFunction = new AdResourcePermission();
                                        defaultFunction.Id            = function.FunctionId;
                                        defaultFunction.Code          = function.FunctionCode;
                                        defaultFunction.Title         = function.Title;
                                        defaultFunction.Description   = function.Description;
                                        defaultFunction.Api           = string.Empty;
                                        defaultFunction.Path          = string.Empty;
                                        defaultFunction.Ord           = function.Ord;
                                        defaultFunction.ParentCode    = function.ParentCode;
                                        defaultFunction.FunctionCode  = function.FunctionCode;
                                        defaultFunction.FunctionName  = function.Title;
                                        defaultFunction.HasPermission = true;
                                        defaultFunction.IsFunction    = true;
                                        result.Add(defaultFunction); // Add first function

                                        var grpFunctionChild = groupFunction.FirstOrDefault(x => x.Key.FunctionCode == function.FunctionCode);
                                        if (grpFunctionChild == null)
                                        {
                                            var query = from pr in listPrivilegeOfFunction
                                                        let perUser = listPermissionUser.FirstOrDefault(x => x.FunctionCode == pr.FunctionCode && x.ResourceCode == pr.ResourceCode)
                                                                      select new AdResourcePermission
                                            {
                                                Id            = pr.PrivilegeId,
                                                Code          = pr.Resource.ResourceCode,
                                                Title         = pr.Resource.Title,
                                                Description   = pr.Resource.Description,
                                                Api           = pr.Resource.Api,
                                                Path          = pr.Resource.Path,
                                                Ord           = pr.Resource.Ord,
                                                Style         = pr.Resource.Style,
                                                Scope         = pr.Resource.Scope,
                                                ParentCode    = pr.Resource.ParentCode,
                                                FunctionCode  = pr.FunctionCode,
                                                FunctionName  = pr.Function.Title,
                                                ExpiredDate   = perUser?.ExpiredDate,
                                                IsFunction    = false,
                                                HasPermission = perUser != null
                                            };
                                            result.AddRange(query);
                                        }
                                        else
                                        {
                                            var query = from pr in listPrivilegeOfFunction
                                                        join gfr in grpFunctionChild on pr.ResourceCode equals gfr.ResourceCode into grpFunc
                                                        from fr in grpFunc.DefaultIfEmpty()
                                                        let perUser = listPermissionUser.FirstOrDefault(x => x.FunctionCode == pr.FunctionCode && x.ResourceCode == pr.ResourceCode)
                                                                      select new AdResourcePermission
                                            {
                                                Id            = pr.PrivilegeId,
                                                Code          = pr.Resource.ResourceCode,
                                                Title         = pr.Resource.Title,
                                                Description   = pr.Resource.Description,
                                                Api           = pr.Resource.Api,
                                                Path          = pr.Resource.Path,
                                                Ord           = pr.Resource.Ord,
                                                Style         = pr.Resource.Style,
                                                Scope         = pr.Resource.Scope,
                                                ParentCode    = pr.Resource.ParentCode,
                                                FunctionCode  = pr.FunctionCode,
                                                FunctionName  = pr.Function.Title,
                                                ExpiredDate   = perUser?.ExpiredDate,
                                                IsFunction    = false,
                                                HasPermission = (countPermissionUser == 0 && fr != null) || perUser != null
                                            };
                                            result.AddRange(query);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        //var groupFunction = listPermissionDefault.GroupBy(g => g.Function).OrderBy(o => o.Key.ParentCode).ThenBy(t => t.Key.FunctionCode).ToList();
                        if (groupFunction.Count > 0)
                        {
                            var listPrivilege = await _context.AdPrivileges.Include(x => x.Function).Include(x => x.Resource).Where(x => x.Resource.Status && groupFunction.Any(y => y.Key.FunctionCode == x.FunctionCode)).ToListAsync();

                            foreach (var groupfunc in groupFunction)
                            {
                                var function = groupfunc.Key;
                                // Get all resource of function
                                var listPrivilegeOfFunction = listPrivilege.Where(x => x.FunctionCode == function.FunctionCode).ToList();
                                if (listPrivilegeOfFunction.Count > 0)
                                {
                                    var defaultFunction = new AdResourcePermission();
                                    defaultFunction.Id            = function.FunctionId;
                                    defaultFunction.Code          = function.FunctionCode;
                                    defaultFunction.Title         = function.Title;
                                    defaultFunction.Description   = function.Description;
                                    defaultFunction.Ord           = function.Ord;
                                    defaultFunction.ParentCode    = function.ParentCode;
                                    defaultFunction.FunctionCode  = function.FunctionCode;
                                    defaultFunction.FunctionName  = function.Title;
                                    defaultFunction.HasPermission = true;
                                    defaultFunction.IsFunction    = true;
                                    result.Add(defaultFunction); // Add first function

                                    var query = from pr in listPrivilegeOfFunction
                                                join gfr in groupfunc on pr.ResourceCode equals gfr.ResourceCode into grpFunc
                                                from fr in grpFunc.DefaultIfEmpty()
                                                let perUser = listPermissionUser.FirstOrDefault(x => x.FunctionCode == pr.FunctionCode && x.ResourceCode == pr.ResourceCode)
                                                              select new AdResourcePermission
                                    {
                                        Id            = pr.PrivilegeId,
                                        Code          = pr.Resource.ResourceCode,
                                        Title         = pr.Resource.Title,
                                        Description   = pr.Resource.Description,
                                        Api           = pr.Resource.Api,
                                        Path          = pr.Resource.Path,
                                        Ord           = pr.Resource.Ord,
                                        Style         = pr.Resource.Style,
                                        Scope         = pr.Resource.Scope,
                                        ParentCode    = pr.Resource.ParentCode,
                                        FunctionCode  = pr.FunctionCode,
                                        FunctionName  = pr.Function.Title,
                                        ExpiredDate   = perUser?.ExpiredDate,
                                        IsFunction    = false,
                                        HasPermission = (countPermissionUser == 0 && fr != null) || perUser != null
                                    };
                                    result.AddRange(query);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
            }

            return(Json(result));
        }
Ejemplo n.º 2
0
        public async Task <JsonResult> GetResource([FromBody] ObjGetResourceModel obj)
        {
            List <AdResourcePermission> result = new List <AdResourcePermission>();

            try
            {
                var listPermissionDefault = await _context.AdPermissions.Include(i => i.Function).Where(x => x.ApplicationCode == obj.AppCode && x.UserId == null && x.RoleId == obj.RoleId && obj.ListGUserId.Any(y => y == x.GroupUserCode)).ToListAsync();

                var listPrivileges = await _context.AdPrivileges.Include(x => x.Function).Include(x => x.Resource).Where(x => x.Resource.Status && obj.ListFuncId.Any(y => y == x.FunctionCode)).ToListAsync();

                if (listPrivileges.Count > 0)
                {
                    var groupFunction = listPrivileges.GroupBy(g => g.Function).OrderBy(o => o.Key.ParentCode).ThenBy(t => t.Key.FunctionCode).ToList();
                    if (groupFunction.Count > 0)
                    {
                        foreach (var groupfunc in groupFunction)
                        {
                            var function = groupfunc.Key;
                            // Get all resource of function
                            var listPrivilegeOfFunction = listPrivileges.Where(x => x.FunctionCode == function.FunctionCode).ToList();
                            if (listPrivilegeOfFunction.Count > 0)
                            {
                                var defaultFunction = new AdResourcePermission();
                                defaultFunction.Id            = function.FunctionId;
                                defaultFunction.Code          = function.FunctionCode;
                                defaultFunction.Title         = function.Title;
                                defaultFunction.Description   = function.Description;
                                defaultFunction.Ord           = function.Ord;
                                defaultFunction.ParentCode    = function.ParentCode;
                                defaultFunction.FunctionCode  = function.FunctionCode;
                                defaultFunction.FunctionName  = function.Title;
                                defaultFunction.HasPermission = true;
                                defaultFunction.IsFunction    = true;
                                result.Add(defaultFunction); // Add first function

                                var query = from pr in listPrivilegeOfFunction
                                            join gfr in groupfunc on pr.ResourceCode equals gfr.ResourceCode into grpFunc
                                            from fr in grpFunc.DefaultIfEmpty()
                                            select new AdResourcePermission
                                {
                                    Id            = pr.PrivilegeId,
                                    Code          = pr.Resource.ResourceCode,
                                    Title         = pr.Resource.Title,
                                    Description   = pr.Resource.Description,
                                    Api           = pr.Resource.Api,
                                    Path          = pr.Resource.Path,
                                    Ord           = pr.Resource.Ord,
                                    Style         = pr.Resource.Style,
                                    Scope         = pr.Resource.Scope,
                                    ParentCode    = pr.Resource.ParentCode,
                                    FunctionCode  = pr.FunctionCode,
                                    FunctionName  = pr.Function.Title,
                                    IsFunction    = false,
                                    HasPermission = !obj.IsMultiple && listPermissionDefault.Any(x => x.FunctionCode == pr.FunctionCode && x.ResourceCode == pr.ResourceCode)
                                };
                                result.AddRange(query);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                JMessage objex = new JMessage()
                {
                    Error = true, Object = ex
                };
            }

            return(Json(result));
        }