/// <summary> /// Может ли пользователь редактировать фотографии объекта недвижимости. /// </summary> /// <param name="user">Информация о пользователе.</param> /// <param name="realtyObject">Объект недвижимости.</param> /// <returns>True - права есть, false - нет.</returns> public bool UserHasAccessToPhotos( UserInfo user, IRealtyObject realtyObject) { return(user.IsGlobalAdmin || this.RealtyObjectBelongsToUser(user, realtyObject)); }
/// <summary> /// Метод обработки запроса на удаление объекта недвижимости. /// </summary> /// <param name="id">Id удаляемого объекта недвижимости.</param> /// <remarks>Пример запроса: DELETE api/realtyobjects/5.</remarks> public void Delete(int id) { IRealtyObject obj = this.realtyObjects.Find(id); bool canDelete = this.AuthorizationMechanism .CanUserDeleteRealtyObject(this.CurrentUserInfo, obj); if (!canDelete) { this.ThrowUnauthorizedResponseException( "Данному пользователю не разрешено удалять данный объект недвижимости."); } this.realtyObjects.Delete(id); this.realtyObjects.SaveChanges(); }
/// <summary> /// Метод обработки запроса на обновление объекта недвижимости. /// </summary> /// <param name="id">Id обновляемого объекта недвижимости.</param> /// <param name="value">Обновленный объект недвижимости /// (в теле запроса).</param> /// <returns>Обновленный объект недвижимости.</returns> /// <remarks>Пример запроса: PUT api/realtyobjects/5 /// (в теле запроса - JSON-объект недвижимости).</remarks> public IRealtyObject Put(int id, [FromBody] JsonRealtyObject value) { value.Date = DateTime.Now; bool canUpdateRealtyObject = this.AuthorizationMechanism .CanUserUpdateRealtyObject(this.CurrentUserInfo, value); if (!canUpdateRealtyObject) { this.ThrowUnauthorizedResponseException( "Данному пользователю не разрешено изменять данный объект недвижимости."); } IRealtyObject updatedObj = this.realtyObjects.Update(value); this.realtyObjects.SaveChanges(); return(updatedObj); }
/// <summary> /// Метод обработки запроса на добавление объекта недвижимости. /// </summary> /// <param name="value">Новый объект недвижимости /// (в теле запроса).</param> /// <returns>Добавленный объект недвижимости.</returns> /// <remarks>Пример запроса: POST api/realtyobjects /// (в теле запроса - JSON-объект недвижимости).</remarks> public IRealtyObject Post([FromBody] JsonRealtyObject value) { value.Date = DateTime.Now; bool canAddRealtyObject = this.AuthorizationMechanism .CanUserAddRealtyObject(this.CurrentUserInfo, value); /* Тут, пожалуй, стоит кидать другую ошибку, а на клиент, наверно, отправлять 403. * Чтобы клиент мог отличать ошибку логина и пароля от нехватки прав. Так удобнее на клиенте. * Сейчас при возврате 401 он автоматом показывает форму залогиниться. */ if (!canAddRealtyObject) { this.ThrowUnauthorizedResponseException( "Данному пользователю не разрешено добавлять данный объект недвижимости."); } IRealtyObject newObj = this.realtyObjects.Add(value); this.realtyObjects.SaveChanges(); return(newObj); }
/// <summary> /// Конструктор на основе любого объекта недвижимости (т.е. /// интерфейса <see cref="IRealtyObject"/>). /// </summary> /// <param name="iRealtyObj">Интерфейс объекта недвижимости.</param> /// <param name="context">EF-контекст базы данных.</param> internal RealtyObjectWrap( IRealtyObject iRealtyObj, VolgaInfoDBEntities context) : this(context) { this.realtyObjectEF = new RealtyObject { RealtyObjectType = this.FindType(iRealtyObj.TypeName), RealtyObjectTypeId = this.FindType(iRealtyObj.TypeName).RealtyObjectTypeId }; Agent agent = this.FindAgent(iRealtyObj.FirmName, iRealtyObj.AgentName, iRealtyObj.Phone); this.realtyObjectEF.Agent = agent; this.realtyObjectEF.AgentId = agent.Id_agent; this.realtyObjectEF.RealtyObjectId = iRealtyObj.RealtyObjectId; this.realtyObjectEF.Date = iRealtyObj.Date; this.realtyObjectEF.Cost = iRealtyObj.Cost; this.realtyObjectEF.Note = iRealtyObj.Note; this.realtyObjectEF.AdditionalInfo = iRealtyObj.AdditionalInfo; this.SetPropertyValues(iRealtyObj.AdditionalAttributes); }