Beispiel #1
0
        public async Task <ActionResult <object> > DeleteDepartment(int id)
        {
            _logger.LogInformation($"Удаление департамента [#{id}]. Инициатор: " + _user.FullInfo);
            string msg;

            DepartmentObjectModel department = await _context.Departments.FindAsync(id);

            if (department is null)
            {
                msg = $"Удаление депаратмента невозможно. Объект [#{id}] не найден в бд";
                _logger.LogError(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.danger.ToString()
                }));
            }

            if (department.isReadonly && _user.Role != AccessLevelUserRolesEnum.ROOT)
            {
                msg = $"Объект [#{id}] 'только для чтения'. Для изменения такого объекта требуются привелегии [{AccessLevelUserRolesEnum.ROOT}]. Ваши привилегии: [{_user.Role}]";
                _logger.LogError(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.danger.ToString()
                }));
            }

            if (await _context.Users.AnyAsync(x => x.DepartmentId == id))
            {
                msg = $"Удаление депаратмента невозможно. В нём числятся сотрудники. Перед удалением перенесесите или удалите сотрудников";
                _logger.LogWarning(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            _context.Departments.Remove(department);
            await _context.SaveChangesAsync();

            msg = $"Департамент [#{id}] удалён";
            _logger.LogInformation(msg);
            return(new ObjectResult(new ServerActionResult()
            {
                Success = true,
                Info = msg,
                Status = StylesMessageEnum.success.ToString()
            }));
        }
Beispiel #2
0
        public async Task <ActionResult <object> > PostDepartment(DepartmentObjectModel ajaxDepartment)
        {
            _logger.LogInformation("Добавление департамента. Инициатор: " + _user.FullInfo);
            string msg;

            ajaxDepartment.Name        = ajaxDepartment.Name.Trim();
            ajaxDepartment.Information = ajaxDepartment.Information.Trim();

            if (!ModelState.IsValid || string.IsNullOrEmpty(ajaxDepartment.Name))
            {
                msg = "Ошибка запроса. Департамент не создан";
                _logger.LogError(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.danger.ToString(),
                    Tag = ModelState
                }));
            }

            if (await _context.Departments.AnyAsync(dprt => dprt.Name.ToLower() == ajaxDepartment.Name.ToLower()))
            {
                msg = "Имя не уникальное. Придумайте другое";
                _logger.LogError(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.danger.ToString()
                }));
            }

            if (_user.Role != AccessLevelUserRolesEnum.ROOT)
            {
                ajaxDepartment.isDisabled       = false;
                ajaxDepartment.isGlobalFavorite = false;
                ajaxDepartment.isReadonly       = false;
            }

            _context.Departments.Add(ajaxDepartment);
            await _context.SaveChangesAsync();

            msg = $"Департамент создан: id={ajaxDepartment.Id}";
            _logger.LogInformation(msg);
            return(new ObjectResult(new ServerActionResult()
            {
                Success = true,
                Info = msg,
                Status = StylesMessageEnum.success.ToString(),
                Tag = ajaxDepartment.Id
            }));
        }
Beispiel #3
0
        public async Task <IActionResult> PutDepartment(int id, DepartmentObjectModel ajaxDepartment)
        {
            _logger.LogInformation($"Изменение департамента [#{id}]. Инициатор: " + _user.FullInfo);
            string msg;

            ajaxDepartment.Name        = ajaxDepartment.Name.Trim();
            ajaxDepartment.Information = ajaxDepartment.Information.Trim();

            if (!ModelState.IsValid ||
                string.IsNullOrEmpty(ajaxDepartment.Name) ||
                id != ajaxDepartment.Id ||
                id < 1 ||
                !await _context.Departments.AnyAsync(dprt => dprt.Id == id) ||
                await _context.Departments.AnyAsync(dprt => dprt.Name.ToLower() == ajaxDepartment.Name.ToLower() && dprt.Id != id))
            {
                msg = "Изменение депаратмента невозможно. Ошибка запроса";
                _logger.LogError(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.danger.ToString(),
                    Tag = ModelState
                }));
            }

            DepartmentObjectModel departmentDb = await _context.Departments.FirstOrDefaultAsync(dprt => dprt.Id == id);

            if (departmentDb.isReadonly && _user.Role != AccessLevelUserRolesEnum.ROOT)
            {
                msg = $"Объект [#{id}] 'только для чтения'. Для изменения такого объекта требуются привелегии [{AccessLevelUserRolesEnum.ROOT}]. Ваши привилегии: [{_user.Role}]";
                _logger.LogError(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.danger.ToString()
                }));
            }

            departmentDb.Name        = ajaxDepartment.Name;
            departmentDb.Information = ajaxDepartment.Information;
            departmentDb.AvatarId    = ajaxDepartment.AvatarId;

            if (_user.Role == AccessLevelUserRolesEnum.ROOT)
            {
                departmentDb.isDisabled       = ajaxDepartment.isDisabled;
                departmentDb.isGlobalFavorite = ajaxDepartment.isGlobalFavorite;
                departmentDb.isReadonly       = ajaxDepartment.isReadonly;
            }

            _context.Departments.Update(departmentDb);

            try
            {
                await _context.SaveChangesAsync();

                msg = $"Изменения департамента [#{departmentDb.Id}] сохранены";
                _logger.LogInformation(msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = true,
                    Info = msg,
                    Status = StylesMessageEnum.success.ToString()
                }));
            }
            catch (Exception ex)
            {
                msg = $"Во время сохранения изменений в департаменте [#{departmentDb.Id}] произошла непредвиденая ошибка: {ex.Message}{(ex.InnerException is null ? "" : ". InnerException: " + ex.InnerException.Message)}";
                _logger.LogWarning(ex, msg);
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = msg,
                    Status = StylesMessageEnum.danger.ToString()
                }));
            }
        }
        public async Task <IActionResult> Post([FromBody] RegisterModel regUser)
        {
            if (!AppOptions.AllowedWebRegistration)
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Регистрация через web интерфейс отключена администратором",
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            if (!ModelState.IsValid)
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Ошибка контроля валидации модели. Регистрация отклонена.",
                    Status = StylesMessageEnum.warning.ToString(),
                    Tag = ModelState
                }));
            }

            if (AppOptions.IsEnableReCaptchaV2 || AppOptions.IsEnableReCaptchaV2Invisible)
            {
                string privatKey = AppOptions.IsEnableReCaptchaV2Invisible
                    ? AppOptions.reCaptchaV2InvisiblePrivatKey
                    : AppOptions.reCaptchaV2PrivatKey;
                reCaptcha2ResponseModel reCaptcha2Status = reCaptchaVerifier.reCaptcha2SiteVerify(privatKey, regUser.g_recaptcha_response, HttpContext.Connection.RemoteIpAddress.ToString());

                if (reCaptcha2Status is null || !reCaptcha2Status.success || (reCaptcha2Status.ErrorСodes != null && reCaptcha2Status.ErrorСodes.Length > 0))
                {
                    return(new ObjectResult(new ServerActionResult()
                    {
                        Success = false,
                        Info = "Неудачная попытка регистрации. Ошибка верификации reCaptcha.",
                        Status = StylesMessageEnum.danger.ToString(),
                        Tag = reCaptcha2Status
                    }));
                }
            }

            if (await DbContext.Users.AnyAsync(u => u.Name.ToLower() == regUser.PublicNameRegister.ToLower()))
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Неудачная попытка регистрации. Публичное имя используется другим пользователем. Введите другое.",
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            UserObjectModel user = DbContext.Users.FirstOrDefault(u => u.Email.ToLower() == regUser.EmailRegister.ToLower());

            if (user != null)
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Неудачная попытка регистрации. Логин занят. Придумайте другой лгин для входа или воспользуйтесь формой входа.",
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            DepartmentObjectModel userDepartment = DbContext.Departments.FirstOrDefault(x => x.Name.ToLower() == "user");

            if (userDepartment is null)
            {
                userDepartment = new DepartmentObjectModel()
                {
                    Name = "user", isReadonly = true
                };
                DbContext.Departments.Add(userDepartment);
                DbContext.SaveChanges();
            }

            user = new UserObjectModel {
                Email = regUser.EmailRegister, Name = regUser.PublicNameRegister, Password = glob_tools.GetHashString(regUser.PasswordRegister), Role = AccessLevelUserRolesEnum.Auth, DepartmentId = userDepartment.Id
            };
            DbContext.Users.Add(user);
            DbContext.SaveChanges();

            await Authenticate(user);

            return(new ObjectResult(new ServerActionResult()
            {
                Success = true,
                Info = "Регистрация успешно завершена",
                Status = StylesMessageEnum.success.ToString(),
                Tag = new { user.Name, user.Role, Department = user.Department.Name }
            }));
        }