Example #1
0
        /// <summary>
        /// Returns true if user has write access right for document.
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="documentId"></param>
        /// <returns></returns>
        public bool CheckIfUserHasWriteAccess(int userId, int documentId)
        {
            using (DMSDataBaseEntities context = new DMSDataBaseEntities())
            {
                tUser user = context.tUsers.Find(userId);
                if (user.AuthorizationRoleId == (int)AuthorizationRoleCodes.Administrator)
                {
                    return(true);
                }

                tUserDocument ud = context.tUserDocuments.Where(u => u.UserId == userId && u.DocumentId == documentId).SingleOrDefault();
                if (ud == null)
                {
                    return(false);
                }
                if (ud.DocumentAccessRightId == (int)DocumentAccessRightCodes.Owner)
                {
                    return(true);
                }
                if (ud.DocumentAccessRightId == (int)DocumentAccessRightCodes.Modify)
                {
                    return(true);
                }
                return(false);
            }
        }
Example #2
0
        /// <summary>
        /// Opens document for writing for current user if document is not locked and no one currently reads it.
        /// </summary>
        /// <param name="documentId">The document id.</param>
        /// <param name="loggedUserId">The logged user id.</param>
        /// <returns></returns>
        public bool TryOpenDocumentForWriting(int documentId, int loggedUserId)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                using (DMSDataBaseEntities context = new DMSDataBaseEntities())
                {
                    tDocument document = context.tDocuments.Find(documentId);
                    if (document.IsLocked)
                    {
                        scope.Complete();
                        return(false);
                    }
                    int readers = context.tUserDocuments.Where(u => u.DocumentId == documentId && u.IsReading).Count();
                    if (readers > 0)
                    {
                        scope.Complete();
                        return(false);
                    }

                    tUserDocument ud = context.tUserDocuments.Where(u => u.DocumentId == documentId && u.UserId == loggedUserId).Single();
                    ud.IsWriting      = true;
                    document.IsLocked = true;
                    context.SaveChanges();
                    scope.Complete();
                    return(true);
                }
            }
        }
Example #3
0
        /// <summary>
        /// Adds new document to system.
        /// </summary>
        /// <param name="documentDto">The document</param>
        /// <param name="ownerId">The owner id = logged user id.</param>
        /// <returns></returns>
        public DocumentDTO SaveNewDocument(DocumentDTO documentDto, int ownerId)
        {
            if (documentDto == null)
            {
                throw new ArgumentNullException("documentDto");
            }

            documentDto.CreatedAt  = DateTime.Now;
            documentDto.IsArchived = false;
            documentDto.IsLocked   = false;
            documentDto.IsValid    = true;

            tDocument result = Mapper.Map <tDocument>(documentDto);

            result.Version   = 1;
            result.Guid      = Guid.NewGuid();
            result.Extension = result.Extension.TrimStart('.');

            result.tKeywords = Mapper.Map <List <tKeyword> >(documentDto.Keywords.ToList());

            foreach (DocumentShareDTO share in documentDto.DocumentShares)
            {
                tUserDocument ud = new tUserDocument();
                ud.IsReading             = false;
                ud.IsWriting             = false;
                ud.UserId                = share.UserId;
                ud.DocumentId            = documentDto.Id;
                ud.DocumentAccessRightId = (int)share.AccessRight;

                result.tUserDocuments.Add(ud);
            }

            tUserDocument owner = new tUserDocument()
            {
                IsReading             = false,
                IsWriting             = false,
                DocumentAccessRightId = (int)DocumentAccessRightCodes.Owner,
                UserId = ownerId
            };

            using (DMSDataBaseEntities context = new DMSDataBaseEntities())
            {
                result = context.tDocuments.Add(result);
                context.SaveChanges();

                owner.DocumentId = result.Id;
                result.tUserDocuments.Add(owner);
                context.SaveChanges();
            }

            AddAdministratorsToDocument(result.Id, ownerId);
            documentDto.Id = result.Id;
            return(documentDto);
        }
Example #4
0
 /// <summary>
 /// Check if user is currently reading from last version of document.
 /// </summary>
 /// <param name="userId">The user id.</param>
 /// <param name="documentId">The document id.</param>
 /// <returns></returns>
 public bool IsUserReadingFromDocument(int userId, int documentId)
 {
     using (DMSDataBaseEntities context = new DMSDataBaseEntities())
     {
         tUserDocument ud = context.tUserDocuments.Where(u => u.UserId == userId && u.DocumentId == documentId).SingleOrDefault();
         if (ud == null)
         {
             throw new AuthorizationException();
         }
         return(ud.IsReading);
     }
 }
Example #5
0
        /// <summary>
        /// Closes file without saving changes or creating new version.
        /// </summary>
        /// <param name="documentId">The document id.</param>
        /// <param name="userId">The user id.</param>
        public void CloseDocument(int documentId, int userId)
        {
            BeginTransaction();

            tUserDocument ud       = Context.tUserDocuments.Where(u => u.DocumentId == documentId && u.UserId == userId).Single();
            tDocument     document = Context.tDocuments.Find(documentId);

            document.IsLocked = false;
            ud.IsReading      = false;
            ud.IsWriting      = false;
            Context.SaveChanges();

            EndTransaction();
        }
Example #6
0
        /// <summary>
        /// Updates document title, keywords and sharing with users.
        /// </summary>
        /// <param name="documentDto">The document dto.</param>
        /// <param name="loggedUserId">The logged user id.</param>
        public void UpdateDocumentData(DocumentDTO documentDto, long loggedUserId)
        {
            if (documentDto == null)
            {
                throw new ArgumentNullException("documentDto");
            }

            // operators, not owner, not logged user
            Expression <Func <tUserDocument, bool> > oldShareRestrictions = x => x.DocumentId == documentDto.Id &&
                                                                            x.DocumentAccessRightId != (int)DocumentAccessRightCodes.Owner && x.UserId != loggedUserId && x.tUser.AuthorizationRoleId == (int)AuthorizationRoleCodes.Operator;

            using (DMSDataBaseEntities context = new DMSDataBaseEntities())
            {
                tDocument document = context.tDocuments.Find(documentDto.Id);
                document.tKeywords.Clear();
                document.tKeywords = Mapper.Map <List <tKeyword> >(documentDto.Keywords.ToList());

                document.LastModifiedAt = DateTime.Now;
                document.Version++;
                document.Title = documentDto.Title;

                IEnumerable <tUserDocument> oldShared = context.tUserDocuments.Where(oldShareRestrictions);
                foreach (tUserDocument ud in oldShared)
                {
                    context.tUserDocuments.Remove(ud);
                }

                foreach (DocumentShareDTO share in documentDto.DocumentShares)
                {
                    tUserDocument ud = new tUserDocument();
                    ud.IsReading             = false;
                    ud.IsWriting             = false;
                    ud.UserId                = share.UserId;
                    ud.DocumentId            = documentDto.Id;
                    ud.DocumentAccessRightId = (int)share.AccessRight;

                    document.tUserDocuments.Add(ud);
                }

                context.SaveChanges();
            }
        }
Example #7
0
        /// <summary>
        /// Gives modify access right to all administrators of system except owner, to the document.
        /// </summary>
        /// <param name="documentId">The document id</param>
        private void AddAdministratorsToDocument(int documentId, int ownerId)
        {
            using (DMSDataBaseEntities context = new DMSDataBaseEntities())
            {
                IEnumerable <tUser> users = context.tUsers.Where(u => u.AuthorizationRoleId == (int)AuthorizationRoleCodes.Administrator && u.Id != ownerId);
                foreach (tUser user in users)
                {
                    tUserDocument ud = new tUserDocument()
                    {
                        DocumentId            = documentId,
                        IsReading             = false,
                        IsWriting             = false,
                        DocumentAccessRightId = (int)DocumentAccessRightCodes.Modify,
                        UserId = user.Id
                    };

                    context.tUserDocuments.Add(ud);
                }
                context.SaveChanges();
            }
        }
Example #8
0
        /// <summary>
        /// Gives modify access right for all documents in system to admistrator. This method is called when new administrator is added to system.
        /// </summary>
        /// <param name="documentId">The specified </param>
        private void AddDocumentsToAdministrator(int userId)
        {
            BeginTransaction();
            IEnumerable <tDocument> documents = Context.tDocuments.Where(u => u.IsValid);

            foreach (tDocument document in documents)
            {
                tUserDocument ud = new tUserDocument()
                {
                    DocumentId            = document.Id,
                    IsReading             = false,
                    IsWriting             = false,
                    DocumentAccessRightId = (int)DocumentAccessRightCodes.Modify,
                    UserId = userId
                };

                Context.tUserDocuments.Add(ud);
            }

            Context.SaveChanges();
            EndTransaction();
        }