Esempio n. 1
0
        public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }
            int intPageSize = 50;


            var data = await _sysUserInfoServices.QueryPage(a => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key))), page, intPageSize, " uID desc ");


            #region MyRegion
            var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false);

            var allRoles = await _roleServices.Query(d => d.IsDeleted == false);

            var sysUserInfos = data.data;
            foreach (var item in sysUserInfos)
            {
                item.RID      = (allUserRoles.FirstOrDefault(d => d.UserId == item.uID)?.RoleId).ObjToInt();
                item.RoleName = allRoles.FirstOrDefault(d => d.Id == item.RID)?.Name;
            }

            data.data = sysUserInfos;
            #endregion


            return(new MessageModel <PageModel <sysUserInfo> >()
            {
                msg = "获取成功",
                success = data.dataCount >= 0,
                response = data
            });
        }
        public async Task <BaseResponse <PageModel <UserInfo> > > Get(int page = 1, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }
            int intPageSize = 50;
            var data        = await _sysUserInfoServices.QueryPage(a => a.DataFlag == 1 && ((a.UserName != null && a.UserName.Contains(key)) || (a.NickName != null && a.NickName.Contains(key))), page, intPageSize, " Id desc ");

            #region MyRegion
            var allUserRoles = await _userRoleServices.Query();

            var allRoles = await _roleServices.Query(d => d.IsDrop == false);

            var sysUserInfos = data.Models;
            foreach (var item in sysUserInfos)
            {
                var currentUserRoles = allUserRoles.Where(d => d.UserId == item.Id)?.Select(d => d.RoleId).ToList();
                item.RIDs      = currentUserRoles;
                item.RoleNames = allRoles.Where(d => currentUserRoles.Contains((int)d.Id))?.Select(d => d.Name).ToList();
            }
            data.Models = sysUserInfos;
            #endregion

            return(new BaseResponse <PageModel <UserInfo> >()
            {
                Data = data
            });
        }
Esempio n. 3
0
        public async Task <MessageModel <PageModel <SysUserInfoDto> > > Get(int page = 1, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }
            int intPageSize = 50;


            var data = await _sysUserInfoServices.QueryPage(a => a.IsDeleted != true && a.Status >= 0 && ((a.LoginName != null && a.LoginName.Contains(key)) || (a.RealName != null && a.RealName.Contains(key))), page, intPageSize, " Id desc ");


            #region MyRegion

            // 这里可以封装到多表查询,此处简单处理
            var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false);

            var allRoles = await _roleServices.Query(d => d.IsDeleted == false);

            var sysUserInfos = data.data;
            foreach (var item in sysUserInfos)
            {
                var currentUserRoles = allUserRoles.Where(d => d.UserId == item.Id).Select(d => d.RoleId).ToList();
                item.RIDs      = currentUserRoles;
                item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList();
            }

            data.data = sysUserInfos;
            #endregion


            return(Success(data.ConvertTo <SysUserInfoDto>(_mapper)));
        }
Esempio n. 4
0
        public async Task <MessageModel <PageModel <Role> > > Get(int page = 1, int f = 0, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }

            int intPageSize = 50;

            //var roleList = await _roleServices.QueryPage(a => a.IsDeleted != true && (a.Name != null && a.Name.Contains(key)), page, intPageSize, " Id desc ");
            var userRoleIds = (await _userRoleServices.Query(it => it.UserId == _user.ID && it.IsDeleted == false)).Select(it => it.RoleId).ToList();
            PageModel <Role> roles;

            if (userRoleIds.Contains(1))
            {
                roles = await _roleServices.QueryPage(a => a.IsDeleted != true &&
                                                      a.Pid == f && (key == "" || a.Name != null && a.Name.Contains(key)),
                                                      page, intPageSize, " Id desc ");
            }
            else
            {
                if (f > 0)
                {
                    roles = await _roleServices.QueryPage(a => a.IsDeleted != true &&
                                                          a.Pid == f && (key == "" || a.Name != null && a.Name.Contains(key)),
                                                          page, intPageSize, " Id desc ");
                }
                else
                {
                    roles = await _roleServices.QueryPage(a => a.IsDeleted != true &&
                                                          userRoleIds.Contains(a.Id) && (key == "" || a.Name != null && a.Name.Contains(key)),
                                                          page, intPageSize, " Id desc ");
                }
            }

            foreach (var item in roles.data)
            {
                List <int> pidarr = new List <int> {
                };
                var parent        = await _roleServices.QueryById(item.Pid);

                while (parent != null)
                {
                    pidarr.Add(parent.Id);
                    parent = await _roleServices.QueryById(parent.Pid);
                }

                pidarr.Reverse();
                pidarr.Insert(0, 0);
                item.PidArr      = pidarr;
                item.hasChildren = await _roleServices.ExistsChild(item.Id);
            }

            return(new MessageModel <PageModel <Role> >()
            {
                msg = "获取成功",
                success = roles.dataCount >= 0,
                response = roles
            });
        }
Esempio n. 5
0
        public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "")
        {
            var data          = new MessageModel <PageModel <sysUserInfo> >();
            int intTotalCount = 50;
            int TotalCount    = 0;
            int PageCount     = 1;
            List <sysUserInfo> sysUserInfos = new List <sysUserInfo>();

            sysUserInfos = await _sysUserInfoServices.Query(a => a.tdIsDelete != true && a.uStatus >= 0);

            if (!string.IsNullOrEmpty(key))
            {
                sysUserInfos = sysUserInfos.Where(t => (t.uLoginName != null && t.uLoginName.Contains(key)) || (t.uRealName != null && t.uRealName.Contains(key))).ToList();
            }


            //筛选后的数据总数
            TotalCount = sysUserInfos.Count;
            //筛选后的总页数
            PageCount = (Math.Ceiling(TotalCount.ObjToDecimal() / intTotalCount.ObjToDecimal())).ObjToInt();

            sysUserInfos = sysUserInfos.OrderByDescending(d => d.uID).Skip((page - 1) * intTotalCount).Take(intTotalCount).ToList();


            var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false);

            var allRoles = await _roleServices.Query(d => d.IsDeleted == false);

            foreach (var item in sysUserInfos)
            {
                item.uLoginPWD = "no see me";
                if (item != null)
                {
                    item.RID      = (allUserRoles.Where(d => d.UserId == item.uID).FirstOrDefault()?.RoleId).ObjToInt();
                    item.RoleName = allRoles.Where(d => d.Id == item.RID).FirstOrDefault()?.Name;
                }
            }

            return(new MessageModel <PageModel <sysUserInfo> >()
            {
                msg = "获取成功",
                success = TotalCount >= 0,
                response = new PageModel <sysUserInfo>()
                {
                    page = page,
                    pageCount = PageCount,
                    dataCount = TotalCount,
                    data = sysUserInfos,
                }
            });
        }
Esempio n. 6
0
        public async Task <MessageModel <string> > Put([FromBody] sysUserInfo sysUserInfo)
        {
            var data = new MessageModel <string>();

            if (sysUserInfo != null && sysUserInfo.uID > 0)
            {
                if (sysUserInfo.RID > 0)
                {
                    var usrerole = await _userRoleServices.Query(d => d.UserId == sysUserInfo.uID && d.RoleId == sysUserInfo.RID);

                    if (usrerole.Count == 0)
                    {
                        await _userRoleServices.Add(new UserRole(sysUserInfo.uID, sysUserInfo.RID));
                    }
                }

                data.success = await _sysUserInfoServices.Update(sysUserInfo);

                if (data.success)
                {
                    data.msg      = "更新成功";
                    data.response = sysUserInfo?.uID.ObjToString();
                }
            }

            return(data);
        }
Esempio n. 7
0
        public async Task <JsonResponse> DisRole([FromBody] DisRoleViewModel vm)
        {
            var user = await _userServices.QueryById(vm.UserId);

            if (user == null)
            {
                throw new UserOperationException("用户不存在");
            }
            _unitOfWork.Begin();
            var userRoles   = (await _userRoleServices.Query(p => p.UserId == vm.UserId)).ToList();
            var removeCount = 0;
            var addCount    = 0;

            foreach (var userRole in userRoles)
            {
                removeCount += await _userRoleServices.DeleteByIdAsync(userRole.Id);
            }
            foreach (var roleId in vm.RoleIds)
            {
                var userRoleId = await _userRoleServices.AddAsync(new SysUserRole { UserId = vm.UserId, RoleId = roleId });

                addCount += userRoleId > 0 ? 1 : 0;
            }
            if (!(removeCount == userRoles.Count && addCount == vm.RoleIds.Count))
            {
                _unitOfWork.Rollback();
                throw new UserOperationException("操作失败");
            }
            _unitOfWork.Commit();
            return(new JsonResponse(true));
        }
        public async Task <MessageModel <NavigationBar> > GetNavigationBar(int uid)
        {
            var data = new MessageModel <NavigationBar>();

            if (uid > 0)
            {
                var roleId = ((await _userRoleServices.Query(d => d.IsDeleted == false && d.UserId == uid)).FirstOrDefault()?.RoleId).ObjToInt();
                if (roleId > 0)
                {
                    var pids = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && d.RoleId == roleId)).Select(d => d.PermissionId.ObjToInt()).Distinct();

                    if (pids.Any())
                    {
                        var rolePermissionMoudles = (await _permissionServices.Query(d => pids.Contains(d.Id) && d.IsButton == false)).OrderBy(c => c.OrderSort);
                        var permissionTrees       = (from child in rolePermissionMoudles
                                                     where child.IsDeleted == false
                                                     orderby child.Id
                                                     select new NavigationBar
                        {
                            id = child.Id,
                            name = child.Name,
                            pid = child.Pid,
                            order = child.OrderSort,
                            path = child.Code,
                            iconCls = child.Icon,
                            meta = new NavigationBarMeta
                            {
                                requireAuth = true,
                                title = child.Name,
                            }
                        }).ToList();


                        NavigationBar rootRoot = new NavigationBar()
                        {
                            id      = 0,
                            pid     = 0,
                            order   = 0,
                            name    = "根节点",
                            path    = "",
                            iconCls = "",
                            meta    = new NavigationBarMeta(),
                        };

                        permissionTrees = permissionTrees.OrderBy(d => d.order).ToList();

                        RecursionHelper.LoopNaviBarAppendChildren(permissionTrees, rootRoot);

                        data.success = true;
                        if (data.success)
                        {
                            data.response = rootRoot;
                            data.msg      = "获取成功";
                        }
                    }
                }
            }
            return(data);
        }
Esempio n. 9
0
        public async Task <MessageModel <PermissionTree> > GetPermissionTree(int pid = 0, bool needbtn = false)
        {
            var data    = new MessageModel <PermissionTree>();
            var roleIds = (await _userRoleServices.Query(d => d.IsDeleted == false && d.UserId == _user.ID)).Select(d => d.RoleId.ObjToInt()).Distinct().ToList();
            var pids    = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && roleIds.Contains(d.RoleId))).Select(
                d => d.PermissionId.ObjToInt()).Distinct();
            PermissionTree rootRoot = new PermissionTree
            {
                value = 0,
                Pid   = 0,
                label = "根节点"
            };

            if (pids.Any() || roleIds.Contains(1))//超级管理员
            {
                IOrderedEnumerable <Permission> rolePermissionMoudles;
                if (roleIds.Contains(1))
                {
                    rolePermissionMoudles = (await _permissionServices.Query(d => d.IsDeleted == false)).OrderBy(c => c.OrderSort);
                }
                else
                {
                    rolePermissionMoudles = (await _permissionServices.Query(d => pids.Contains(d.Id) && d.IsDeleted == false)).OrderBy(c => c.OrderSort);
                }
                var permissionTrees = (from child in rolePermissionMoudles
                                       orderby child.Id
                                       select new PermissionTree
                {
                    value = child.Id,
                    label = child.Name,
                    Pid = child.Pid,
                    isbtn = child.IsButton,
                    order = child.OrderSort,
                }).ToList();
                permissionTrees = permissionTrees.OrderBy(d => d.order).ToList();
                RecursionHelper.LoopToAppendChildren(permissionTrees, rootRoot, pid, needbtn);
            }
            data.success = true;
            if (data.success)
            {
                data.response = rootRoot;
                data.msg      = "获取成功";
            }

            return(data);
        }
Esempio n. 10
0
        public async Task <List <Role> > GetUserRoleByUserId(long userId)
        {
            var userRoleList = await _userRoleServices.Query(c => c.UserId == userId);

            var roleIds  = userRoleList.Select(s => s.RoleId);
            var roleList = await _roleRepository.Query(m => roleIds.Contains(m.Id));

            return(roleList);
        }
Esempio n. 11
0
        public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }
            int intPageSize = 50;


            var data = await _sysUserInfoServices.QueryPage(a => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key))), page, intPageSize, " uID desc ");


            #region MyRegion

            // 这里可以封装到多表查询,此处简单处理
            var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false);

            var allRoles = await _roleServices.Query(d => d.IsDeleted == false);

            var sysUserInfos = data.data;
            foreach (var item in sysUserInfos)
            {
                var currentUserRoles = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList();
                item.RIDs      = currentUserRoles;
                item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList();
            }

            data.data = sysUserInfos;
            #endregion


            return(new MessageModel <PageModel <sysUserInfo> >()
            {
                msg = "获取成功",
                success = data.dataCount >= 0,
                response = data
            });
        }
Esempio n. 12
0
        /// <summary>
        /// 获取某个用户的所有下级角色
        /// </summary>
        /// <param name="userId">用户id</param>
        /// <returns></returns>
        public async Task <List <Role> > GetNextRoles(int userId)
        {
            var userRoleList = await userRoleServices.Query(it => it.UserId == userId && it.IsDeleted == false);

            var roleList    = new List <Role>();
            var allRoleList = await _dal.Query(it => it.IsDeleted == false);

            userRoleList.ForEach(it =>
            {
                var role = allRoleList.Find(a => a.Id == it.RoleId);
                RecursionHelper.LoopToAppendList(allRoleList, role, roleList);
            });

            return(roleList);
        }
Esempio n. 13
0
        public async Task<ApiResponseModel<NavigationBarDto>> GetNavigationBar(int uid)
        {
            var token = _httpContext.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", "");
            var id = JwtHelper.SerializeJwt(token)?.Uid;
            if (id != uid)
            {
                return ApiResponse.Error<NavigationBarDto>("参数和token不一样");
            }
            var roleIds = (await _userRoleServices.Query(m => m.IsDeleted == false && m.UserId == id)).Select(m => m.RoleId).Distinct().ToList();
            if (!roleIds.Any())
            {
                return ApiResponse.Error<NavigationBarDto>("用户未分配角色");
            }
            var permissionIds = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && roleIds.Contains(d.RoleId))).Select(m => m.PermissionId).Distinct().ToList();
            var permissionList = (await _permissionServices.Query(m => permissionIds.Contains(m.Id) && m.IsDeleted == false)).OrderBy(c => c.OrderSort).ToList();
            var permissionTree = permissionList.Select(child => new NavigationBarDto
            {

                id = child.Id,
                name = child.Name,
                pid = child.Pid,
                order = child.OrderSort,
                path = child.Code,
                iconCls = child.Icon,
                Func = child.Func,
                IsHide = child.IsHide.ObjToBool(),
                IsButton = child.IsButton.ObjToBool(),
                meta = new NavigationBarMetaDto
                {
                    requireAuth = true,
                    title = child.Name,
                    NoTabPage = child.IsHide.ObjToBool()
                }
            }).ToList();
            NavigationBarDto rootRoot = new NavigationBarDto
            {
                id = 0,
                pid = 0,
                order = 0,
                name = "根节点",
                path = "",
                iconCls = "",
                meta = new NavigationBarMetaDto(),

            };
            LoopNaviBarAppendChildren(permissionTree, rootRoot);
            return ApiResponse.Success(rootRoot);
        }
Esempio n. 14
0
        public async Task <IActionResult> Login(LoginInput input)
        {
            if (string.IsNullOrWhiteSpace(input.UserName))
            {
                throw new UserOperationException("请输入用户名!");
            }
            if (string.IsNullOrWhiteSpace(input.Password))
            {
                throw new UserOperationException("请输入密码!");
            }
            var user = (await _userServices.Query(u => u.UserName == input.UserName && u.Password == MD5Helper.MD5Encrypt32(input.Password))).SingleOrDefault();

            if (user == null)
            {
                throw new UserOperationException("用户不存在或密码错误!");
            }
            if (user.Status == 0)
            {
                throw new UserOperationException("您的账号已被禁用!");
            }
            var tokenModel = new TokenModelJwt {
                UserId = user.Id
            };
            var userRoles = await _userRoleServices.Query(ur => ur.UserId == user.Id);

            if (userRoles.Any())
            {
                var roleIds = userRoles.Select(ur => ur.RoleId).ToList();
                var roles   = await _roleServices.Query(r => roleIds.Contains(r.Id));

                tokenModel.Roles = roles.Select(r => r.Name).ToList();
            }

            var userPermissions = await _permissionServices.GetUserPermissions(user.Id);

            _requirement.Permissions = userPermissions.Select(p => new Permission
            {
                Role = p.RoleName,
                Url  = p.LinkUrl
            }).ToList();

            var token = _jwtHelper.BuildJwtToken(tokenModel);

            return(Ok(token));
        }
Esempio n. 15
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="loginName"></param>
        /// <param name="loginPwd"></param>
        /// <returns></returns>
        public async Task <string> GetUserRoleNameStr(string loginName, string loginPwd)
        {
            string roleName = "";
            var    user     = (await base.Query(a => a.uLoginName == loginName && a.uLoginPWD == loginPwd)).FirstOrDefault();

            if (user != null)
            {
                var userRoles = await _userRoleServices.Query(ur => ur.UserId == user.uID);

                if (userRoles.Count > 0)
                {
                    var roles = await _roleRepository.QueryByIDs(userRoles.Select(ur => ur.RoleId.ObjToString()).ToArray());

                    roleName = string.Join(',', roles.Select(r => r.Name).ToArray());
                }
            }
            return(roleName);
        }
Esempio n. 16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="loginName"></param>
        /// <param name="loginPwd"></param>
        /// <returns></returns>
        public async Task <string> GetUserRoleNameStr(string loginName, string loginPwd)
        {
            string roleName = "";
            var    user     = (await base.Query(a => a.UserName == loginName && a.UserPWD == loginPwd)).FirstOrDefault();
            var    roleList = await _roleRepository.Query(a => a.IsDrop == false);

            if (user != null)
            {
                var userRoles = await _userRoleServices.Query(ur => ur.UserId == user.Id);

                if (userRoles.Count > 0)
                {
                    var arr   = userRoles.Select(ur => ur.RoleId.ToString()).ToList();
                    var roles = roleList.Where(d => arr.Contains(d.Id.ToString()));

                    roleName = string.Join(',', roles.Select(r => r.Name).ToArray());
                }
            }
            return(roleName);
        }
Esempio n. 17
0
        public async Task <string> GetUserRoleNameStr(string loginName, string loginPwd)
        {
            string roleName = "";
            var    user     = (await base.Query(a => a.ULoginName == loginName && a.ULoginPwd == loginPwd)).FirstOrDefault();
            var    roleList = await m_RoleRepository.Query(a => a.IsDeleted == false);

            if (user != null)
            {
                var userRole = await m_UserRolesServices.Query(q => q.UserId == user.UId);

                if (userRole.Count > 0)
                {
                    var arr   = userRole.Select(s => s.RoleId.ObjToString()).ToList();
                    var roles = roleList.Where(w => arr.Contains(w.Id.ObjToString()));

                    roleName = string.Join(',', roles.Select(s => s.Name).ToArray());
                }
            }

            return(roleName);
        }
Esempio n. 18
0
        public BaseResponse UserList(int page = 1, string key = "")
        {
            int pageSize = 10;
            var pager    = new Pager(page, pageSize);
            var query    = _userServices.Find();

            if (!string.IsNullOrEmpty(key))
            {
                query = query.Where(t => t.RealName.Contains(key));
            }
            pager.TotalCount = query.Count();
            var data         = query.OrderByDescending(x => x.Id).Skip(pager.PageSize * (pager.Page - 1)).Take(pager.PageSize).ToList();
            var allUserRoles = _userRoleServices.Query(d => d.IsDeleted == false).ToList();
            var allRoles     = _roleServices.Query(d => d.IsDeleted == false).ToList();

            foreach (var item in data)
            {
                item.RID      = (allUserRoles.FirstOrDefault(d => d.UserId == item.Id)?.RoleId).ToInt();
                item.RoleName = allRoles.FirstOrDefault(d => d.Id == item.RID)?.Name;
            }
            var rep = new SuccessListResponse <List <User> >(data, pager);

            return(rep);
        }
Esempio n. 19
0
        public async Task <MessageModel <NavigationBar> > GetNavigationBar(int uid)
        {
            var data = new MessageModel <NavigationBar>();

            // 两种方式获取 uid
            var uidInHttpcontext1 = (from item in _httpContext.HttpContext.User.Claims
                                     where item.Type == "jti"
                                     select item.Value).FirstOrDefault().ObjToInt();

            var uidInHttpcontext = (JwtHelper.SerializeJwt(_httpContext.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", "")))?.Uid;

            if (uid > 0 && uid == uidInHttpcontext)
            {
                var roleId = ((await _userRoleServices.Query(d => d.IsDeleted == false && d.UserId == uid)).FirstOrDefault()?.RoleId).ObjToInt();
                if (roleId > 0)
                {
                    var pids = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && d.RoleId == roleId)).Select(d => d.PermissionId.ObjToInt()).Distinct();

                    if (pids.Any())
                    {
                        var rolePermissionMoudles = (await _permissionServices.Query(d => pids.Contains(d.Id) && d.IsButton == false)).OrderBy(c => c.OrderSort);
                        var permissionTrees       = (from child in rolePermissionMoudles
                                                     where child.IsDeleted == false
                                                     orderby child.Id
                                                     select new NavigationBar
                        {
                            id = child.Id,
                            name = child.Name,
                            pid = child.Pid,
                            order = child.OrderSort,
                            path = child.Code,
                            iconCls = child.Icon,
                            IsHide = child.IsHide.ObjToBool(),
                            meta = new NavigationBarMeta
                            {
                                requireAuth = true,
                                title = child.Name,
                                NoTabPage = child.IsHide.ObjToBool()
                            }
                        }).ToList();


                        NavigationBar rootRoot = new NavigationBar()
                        {
                            id      = 0,
                            pid     = 0,
                            order   = 0,
                            name    = "根节点",
                            path    = "",
                            iconCls = "",
                            meta    = new NavigationBarMeta(),
                        };

                        permissionTrees = permissionTrees.OrderBy(d => d.order).ToList();

                        RecursionHelper.LoopNaviBarAppendChildren(permissionTrees, rootRoot);

                        data.success = true;
                        if (data.success)
                        {
                            data.response = rootRoot;
                            data.msg      = "获取成功";
                        }
                    }
                }
            }
            return(data);
        }
Esempio n. 20
0
        public async Task <BaseResponse <RouterBar> > GetNavigationBar(int uid)
        {
            var data = new BaseResponse <RouterBar>();

            try
            {
                #region MyRegion
                //RouterBar rootRoot = new RouterBar()
                //{
                //    id = 0,
                //    pid = 0,
                //    order = 0,
                //    name = "根节点",
                //    path = "",
                //    icon = "",
                //    //meta = new NavigationBarMeta(),
                //};
                //RouterBar lst1 = new RouterBar
                //{
                //    id = 1,
                //    APIAddress = "",
                //    icon = "fa-qq",
                //    leaf = true,
                //    path = "/",
                //    name = "首页",
                //    pid = 1
                //};
                //RouterBar lst1_1 = new RouterBar
                //{
                //    id = 1,
                //    APIAddress = "",
                //    leaf = true,
                //    path = "",
                //    name = "About",
                //    pid = 1
                //};
                //lst1.children.Add(lst1_1);
                //RouterBar lst2 = new RouterBar
                //{
                //    id = 1,
                //    APIAddress = "",
                //    icon = "fa-users",
                //    leaf = false,
                //    path = "/Home",
                //    name = "权限管理",
                //    pid = 1
                //};
                //RouterBar lst2_1 = new RouterBar
                //{
                //    id = 1,
                //    APIAddress = "",
                //    icon = "fa-qq",
                //    leaf = false,
                //    path = "/User/User",
                //    name = "用户管理",
                //    pid = 1
                //};
                //RouterBar lst2_2 = new RouterBar
                //{
                //    id = 1,
                //    APIAddress = "",
                //    icon = "fa-qq",
                //    leaf = false,
                //    path = "/User/Roles",
                //    name = "角色管理",
                //    pid = 1
                //};
                //RouterBar lst2_3 = new RouterBar
                //{
                //    id = 1,
                //    APIAddress = "",
                //    icon = "fa-qq",
                //    leaf = false,
                //    path = "/Menu/Menu",
                //    name = "菜单管理",
                //    pid = 1
                //};
                //lst2.children.Add(lst2_1);
                //lst2.children.Add(lst2_2);
                //lst2.children.Add(lst2_3);
                //rootRoot.children.Add(lst1);
                //rootRoot.children.Add(lst2);
                //data.Data = rootRoot;
                #endregion
                // 三种方式获取 uid
                var uidInHttpcontext1 = (from item in _httpContext.HttpContext.User.Claims
                                         where item.Type == "jti"
                                         select item.Value).FirstOrDefault();
                var uidInHttpcontext = (JwtHelper.SerializeJwt(_httpContext.HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "")))?.Uid;
                var uName            = _user.Name;
                if (uid > 0 && uid == uidInHttpcontext)
                {
                    var roleId = ((await _userRoleServices.Query(d => d.UserId == uid)).FirstOrDefault()?.RoleId);
                    if (roleId > 0)
                    {
                        var menus = await _menuServices.Query(d => d.IsDrop == false);

                        var menusTrees = (from item in menus
                                          where item.IsDrop == false
                                          orderby item.Id
                                          select new RouterBar
                        {
                            id = item.Id,
                            APIAddress = item.ApiUrl,
                            icon = item.Icon,
                            leaf = item.RoutePath == "-" ? false : true,
                            path = item.RoutePath,
                            name = item.Name,
                            pid = item.ParentId,
                            order = item.OrderSort,
                        }).ToList();

                        RouterBar rootRoot = new RouterBar()
                        {
                            id    = 0,
                            pid   = 0,
                            order = 0,
                            name  = "根节点",
                            path  = "",
                            icon  = ""
                        };
                        menusTrees = menusTrees.OrderBy(d => d.order).ToList();

                        RecursionHelper.LoopNaviBarAppendChildren(menusTrees, rootRoot);
                        data.Data = rootRoot;
                        data.Msg  = "获取成功";
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return(data);
        }
Esempio n. 21
0
        public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "")
        {
            if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
            {
                key = "";
            }
            int intPageSize = 50;
            var nextRoleIds = (await _roleServices.GetNextRoles(_user.ID)).Select(it => it.Id).ToList();
            var data        = await _sysUserInfoServices.QueryTabsPage <sysUserInfo, UserRole, sysUserInfo>((a, b) =>
                                                                                                            new object[]
            {
                JoinType.Inner, a.uID == b.UserId
            },
                                                                                                            (a, b) => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key)) &&
                                                                                                                                                                 nextRoleIds.Contains(b.RoleId)),
                                                                                                            a => new { a.uID },
                                                                                                            (a, b) => a,
                                                                                                            page, intPageSize, " uID desc ");

            #region MyRegion

            // 这里可以封装到多表查询,此处简单处理
            var userIds      = data.data.Select(it => it.uID).ToList();
            var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false && userIds.Contains(d.UserId));

            var allRoles = await _roleServices.Query(d => d.IsDeleted == false);

            var currentRoleId = (await _userRoleServices.Query(it => it.UserId == _user.ID && it.IsDeleted == false)).FirstOrDefault();
            var sysUserInfos  = data.data;
            foreach (var item in sysUserInfos)
            {
                item.RIDArray = await _roleServices.GetPreviousRoleIds(item.uID);

                var userRoleIds            = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList();
                List <List <int> > roleIds = new List <List <int> >();
                foreach (var roleId in userRoleIds)
                {
                    List <int> ids  = new List <int>();
                    var        role = allRoles.Where(it => it.Id == roleId).FirstOrDefault();
                    if (role == null)
                    {
                        continue;
                    }
                    ids.Add(role.Id);
                    Role parent = allRoles.Where(it => it.Id == role.Pid).FirstOrDefault();
                    if (parent != null)
                    {
                        ids.Add(parent.Id);
                    }
                    while (parent != null)
                    {
                        parent = allRoles.Where(it => it.Id == parent.Pid).FirstOrDefault();
                        if (parent != null)
                        {
                            ids.Add(parent.Id);
                        }
                    }
                    ;
                    ids.Reverse();
                    roleIds.Add(ids);
                }
                item.RIDs      = new List <int>();
                item.RIDArray  = roleIds;
                item.RoleNames = allRoles.Where(d => userRoleIds.Contains(d.Id)).Select(d => d.Name).ToList();
            }

            data.data = sysUserInfos;
            #endregion


            return(new MessageModel <PageModel <sysUserInfo> >()
            {
                msg = "获取成功",
                success = data.dataCount >= 0,
                response = data
            });
        }
Esempio n. 22
0
        // 重写异步处理程序
        protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement)
        {
            var httpContext = _accessor.HttpContext;

            // 获取系统中所有的角色和菜单的关系集合
            if (!requirement.Permissions.Any())
            {
                var data = await _roleModulePermissionServices.RoleModuleMaps();

                var list = new List <PermissionItem>();
                // ids4和jwt切换
                // ids4
                if (Permissions.IsUseIds4)
                {
                    list = (from item in data
                            where item.IsDeleted == false
                            orderby item.Id
                            select new PermissionItem
                    {
                        Url = item.Module?.LinkUrl,
                        Role = item.Role?.Id.ObjToString(),
                    }).ToList();
                }
                // jwt
                else
                {
                    list = (from item in data
                            where item.IsDeleted == false
                            orderby item.Id
                            select new PermissionItem
                    {
                        Url = item.Module?.LinkUrl,
                        Role = item.Role?.Name.ObjToString(),
                    }).ToList();
                }
                requirement.Permissions = list;
            }

            if (httpContext != null)
            {
                var questUrl = httpContext.Request.Path.Value.ToLower();

                // 整体结构类似认证中间件UseAuthentication的逻辑,具体查看开源地址
                // https://github.com/dotnet/aspnetcore/blob/master/src/Security/Authentication/Core/src/AuthenticationMiddleware.cs
                httpContext.Features.Set <IAuthenticationFeature>(new AuthenticationFeature
                {
                    OriginalPath     = httpContext.Request.Path,
                    OriginalPathBase = httpContext.Request.PathBase
                });

                // Give any IAuthenticationRequestHandler schemes a chance to handle the request
                // 主要作用是: 判断当前是否需要进行远程验证,如果是就进行远程验证
                var handlers = httpContext.RequestServices.GetRequiredService <IAuthenticationHandlerProvider>();
                foreach (var scheme in await Schemes.GetRequestHandlerSchemesAsync())
                {
                    if (await handlers.GetHandlerAsync(httpContext, scheme.Name) is IAuthenticationRequestHandler handler && await handler.HandleRequestAsync())
                    {
                        context.Fail();
                        return;
                    }
                }


                //判断请求是否拥有凭据,即有没有登录
                var defaultAuthenticate = await Schemes.GetDefaultAuthenticateSchemeAsync();

                if (defaultAuthenticate != null)
                {
                    var result = await httpContext.AuthenticateAsync(defaultAuthenticate.Name);

                    //result?.Principal不为空即登录成功
                    if (result?.Principal != null)
                    {
                        httpContext.User = result.Principal;

                        // 获取当前用户的角色信息
                        var currentUserRoles = new List <string>();
                        // ids4和jwt切换
                        // ids4
                        if (Permissions.IsUseIds4)
                        {
                            currentUserRoles = (from item in httpContext.User.Claims
                                                where item.Type == "role"
                                                select item.Value).ToList();
                        }
                        else
                        {
                            // jwt
                            currentUserRoles = (from item in httpContext.User.Claims
                                                where item.Type == requirement.ClaimType
                                                select item.Value).ToList();
                        }

                        var isMatchRole = false;
                        var roleIds     = (await userRoleServices.Query(d => d.IsDeleted == false && d.UserId == user.ID)).Select(d => d.RoleId.ObjToInt()).Distinct().ToList();
                        if (roleIds.Contains(1))//超级管理员不需要菜单验证
                        {
                            isMatchRole = true;
                        }
                        else
                        {
                            var permisssionRoles = requirement.Permissions.Where(w => currentUserRoles.Contains(w.Role));
                            foreach (var item in permisssionRoles)
                            {
                                try
                                {
                                    if (Regex.Match(questUrl, item.Url?.ObjToString().ToLower())?.Value == questUrl)
                                    {
                                        isMatchRole = true;
                                        break;
                                    }
                                }
                                catch (Exception)
                                {
                                    // ignored
                                }
                            }
                        }

                        //验证权限
                        if (currentUserRoles.Count <= 0 || !isMatchRole)
                        {
                            context.Fail();
                            return;
                        }

                        var isExp = false;
                        // ids4和jwt切换
                        // ids4
                        if (Permissions.IsUseIds4)
                        {
                            isExp = (httpContext.User.Claims.SingleOrDefault(s => s.Type == "exp")?.Value) != null && DateHelper.StampToDateTime(httpContext.User.Claims.SingleOrDefault(s => s.Type == "exp")?.Value) >= DateTime.Now;
                        }
                        else
                        {
                            // jwt
                            isExp = (httpContext.User.Claims.SingleOrDefault(s => s.Type == ClaimTypes.Expiration)?.Value) != null && DateTime.Parse(httpContext.User.Claims.SingleOrDefault(s => s.Type == ClaimTypes.Expiration)?.Value) >= DateTime.Now;
                        }
                        if (isExp)
                        {
                            context.Succeed(requirement);
                        }
                        else
                        {
                            context.Fail();
                            return;
                        }
                        return;
                    }
                }
                //判断没有登录时,是否访问登录的url,并且是Post请求,并且是form表单提交类型,否则为失败
                if (!(questUrl.Equals(requirement.LoginPath.ToLower(), StringComparison.Ordinal) && (!httpContext.Request.Method.Equals("POST") || !httpContext.Request.HasFormContentType)))
                {
                    context.Fail();
                    return;
                }
            }

            //context.Succeed(requirement);
        }