/// <summary>
        /// 添加菜单模块
        /// </summary>
        /// <param name="module"></param>
        /// <returns></returns>
        public async Task Add(SysModule module)
        {
            var max = await _moduleRep.GetLayerCount();

            if (max.Count < 31)
            {
                module.Layer  = max.Layer;
                module.Number = Convert.ToInt64(Math.Pow(2, max.Count.Value));
            }
            else if (max.Count == 31) //0次方 到 30次方 共31个数              js语言的限制 导致  位运算 32位
            {
                module.Layer  = ++max.Layer;
                module.Number = 1;
            }
            else
            {
                throw new H_Exception("数据库数据异常,请检查");
            }

            try
            {
                await _moduleRep.InsertAsync(module);
            }
            catch (PostgresException ex)
            {
                H_AssertEx.That(ex.SqlState == H_PostgresSqlState.E23505, "添加失败,请重新添加");
            }
        }
        /// <summary>
        /// 获取用户
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public async Task <SysUser> Get(long userId)
        {
            var user = await _userRep.GetAsync(userId);

            H_AssertEx.That(user == null, "用户不存在");
            H_AssertEx.That(user.IsDeleted, "用户已删除");
            return(user);
        }
示例#3
0
        /// <summary>
        /// 获取字典
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <SysDict> Get(long id)
        {
            var dict = await _dictRep.GetAsync(id);

            H_AssertEx.That(dict == null, "字典数据不存在");
            H_AssertEx.That(dict.IsDeleted, "字典数据已删除");

            return(dict);
        }
        /// <summary>
        /// 获取菜单模块
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <SysModule> Get(long id)
        {
            var module = await _moduleRep.GetAsync(id);

            H_AssertEx.That(module == null, "模块或资源不存在");
            H_AssertEx.That(module.IsDeleted, "模块或资源已删除");

            return(module);
        }
        /// <summary>
        /// 获取角色
        /// </summary>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public async Task <SysRole> Get(long roleId)
        {
            var item = await _roleRep.GetAsync(roleId);

            H_AssertEx.That(item == null, "角色不存在");
            H_AssertEx.That(item.IsDeleted, "角色已删除");

            return(item);
        }
示例#6
0
        /// <summary>
        /// 检查是否存在相同名字or相同编码
        /// </summary>
        /// <returns></returns>
        public async Task CheckNameCode(string name, string code)
        {
            var sameItems = await _dictRep.GetListAsync(new DictQuery { DictName = name });

            H_AssertEx.That(sameItems.Count > 0, "字典名称已存在,请重新输入");

            sameItems = await _dictRep.GetListAsync(new DictQuery { DictCode = code });

            H_AssertEx.That(sameItems.Count > 0, "字典名称已存在,请重新输入");
        }
示例#7
0
        /// <summary>
        /// 检查字典数据项是否存在相同名字or相同值
        /// </summary>
        /// <param name="name"></param>
        /// <param name="value"></param>
        /// <param name="parentId"></param>
        /// <returns></returns>
        public async Task CheckItemNameValue(string name, int value, long parentId)
        {
            var sameItems = await _dictRep.GetListAsync(new DictQuery { ParentId = parentId, ItemName = name });

            H_AssertEx.That(sameItems.Count > 0, "数据项名称已存在,请重新输入");


            sameItems = await _dictRep.GetListAsync(new DictQuery { ParentId = parentId, ItemValue = value });

            H_AssertEx.That(sameItems.Count > 0, "数据项值已存在,请重新输入");
        }
        /// <summary>
        /// 更新用户密码
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="oldPwd"></param>
        /// <param name="newPwd"></param>
        /// <returns></returns>
        public async Task UpdatePwd(long userId, string oldPwd, string newPwd)
        {
            var user = await Get(userId);

            oldPwd = H_EncryptProvider.HMACSHA256(oldPwd, _appSettings.Key.Sha256Key);

            H_AssertEx.That(user.Password != oldPwd, "原密码错误");

            user.PasswordLevel = (PasswordLevel)H_Util.CheckPasswordLevel(newPwd);
            user.Password      = H_EncryptProvider.HMACSHA256(newPwd, _appSettings.Key.Sha256Key);

            await _userRep.UpdateAsync(user, user => new { user.Password, user.PasswordLevel });
        }
        /// <summary>
        /// 删除模块
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task Delete(long id)
        {
            MustNotRoot(id);

            var module = await Get(id);

            var childs = await _moduleRep.GetListAsync(new ModuleQuery()
            {
                ParentId = module.Id
            });

            H_AssertEx.That(childs != null && childs.Count > 0, "存在子节点无法删除");

            await _moduleRep.DeleteAsync(module);
        }
示例#10
0
        /// <summary>
        /// 添加用户
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public async Task Add(SysUser user)
        {
            try
            {
                var users = await _userRep.GetAllAsync(new UserQuery { Account = user.Account });

                H_AssertEx.That(users.Count > 0, "账号已存在");


                H_AssertEx.That(user.RoleLevel <= _currentUser.RoleLevel, "无法添加同级及高级角色用户");

                await _userRep.InsertAsync(user);
            }
            catch (PostgresException ex)
            {
                H_AssertEx.That(ex.SqlState == H_PostgresSqlState.E23505, "账号已存在");
            }
        }
示例#11
0
        /// <summary>
        /// 根据账号密码登录
        /// </summary>
        /// <param name="account"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public async Task <SysUser> LoginByAccountPwd(string account, string password)
        {
            var users = await _userRep.GetUserByAccountPwd(account, password);

            H_AssertEx.That(users.Count == 0, "账号或密码错误");

            H_AssertEx.That(users.Count > 1, "用户数据异常");

            var user = users.First();

            H_AssertEx.That(!user.Enabled.Value, "用户已注销");

            H_AssertEx.That(string.IsNullOrWhiteSpace(user.AuthNumbers), "没有系统权限,暂时无法登录,请联系管理员");

            var authNums = JsonConvert.DeserializeObject <List <long> >(user.AuthNumbers);

            H_AssertEx.That(authNums.Count == 0, "没有系统权限,暂时无法登录,请联系管理员");

            return(user);
        }
        /// <summary>
        /// 是否存在相同别名的模块
        /// </summary>
        public async Task CheckAlias(string alias, ModuleType?moduleType, long?parentId, long?id = null)
        {
            var modules = await _moduleRep.GetSameAlias(alias, moduleType, parentId, id);

            H_AssertEx.That(modules.Count > 0, "存在相同别名的模块或资源");
        }
        /// <summary>
        /// 是否存在相同名字的模块
        /// </summary>
        public async Task CheckName(string name, ModuleType?moduleType, long?parentId, long?id = null)
        {
            var modules = await _moduleRep.GetSameName(name, moduleType, parentId, id);

            H_AssertEx.That(modules.Count > 0, "存在相同名称的模块或资源");
        }
 /// <summary>
 /// 检测必须不是根节点方可继续操作
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public void MustNotRoot(long id)
 {
     H_AssertEx.That(id == 0, "无法操作系统根节点");
 }
示例#15
0
 /// <summary>
 /// 检测用户
 /// </summary>
 /// <param name="userId"></param>
 /// <returns></returns>
 public void CheckUser(long userId)
 {
     H_AssertEx.That(userId == _currentUser.Id, "无法操作当前登录用户");
     H_AssertEx.That(userId == -1, "无法操作系统管理员账户");
 }
示例#16
0
        /// <summary>
        /// 导入excel
        /// </summary>
        /// <param name="files"></param>
        /// <returns></returns>
        public async Task Import(IFormFileCollection files)
        {
            H_AssertEx.That(files == null || files.Count == 0, "请选择Excel文件");

            //格式限制
            var allowType = new string[] { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" };

            H_AssertEx.That(files.Any(b => !allowType.Contains(b.ContentType)), "只能上传Excel文件");
            ////大小限制
            //if (files.Sum(b => b.Length) >= 1024 * 1024 * 4)
            //{

            //}

            var users = new List <SysUser>();

            foreach (IFormFile file in files)
            {
                string rootPath = _appSettings.FilePath.ImportExcelPath;

                H_File.CreateDirectory(rootPath);

                string filePath = Path.Combine(rootPath, file.FileName);

                using (var fs = System.IO.File.Create(filePath))
                {
                    // 复制文件
                    file.CopyTo(fs);
                    // 清空缓冲区数据
                    fs.Flush();
                }

                using (var ep = new ExcelPackage(new FileInfo(filePath)))
                {
                    var worksheet = ep.Workbook.Worksheets[0];
                    if (worksheet != null && worksheet.Cells[1, 1].Text.Trim() != "姓名")
                    {
                        throw new H_Exception("上传数据列名有误,请检查");
                    }
                    foreach (var ws in ep.Workbook.Worksheets)
                    {
                        int colStart = ws.Dimension.Start.Column;    //工作区开始列,start=1
                        int colEnd   = ws.Dimension.End.Column;      //工作区结束列
                        int rowStart = ws.Dimension.Start.Row;       //工作区开始行号,start=1
                        int rowEnd   = ws.Dimension.End.Row;         //工作区结束行号

                        for (int i = rowStart + 1; i <= rowEnd; i++) //第1行是列名,跳过
                        {
                            var user = new SysUser();
                            user.Name             = ws.Cells[i, colStart].Text;
                            user.FirstNameInitial = WordsHelper.GetFirstPinyin(user.Name.Substring(0, 1));
                            user.Password         = H_EncryptProvider.HMACSHA256("123456", _appSettings.Key.Sha256Key);
                            users.Add(user);
                        }
                    }
                }
            }

            if (users.Count == 0)
            {
                return;
            }

            await _userRep.InsertAsync(users);
        }