/// <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));
 }
Example #2
0
        /// <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();
        }
Example #3
0
        /// <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);
        }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }