예제 #1
0
        /// <summary>
        /// salvataggio del documento nella directory del definitivo
        /// </summary>
        /// <param name="LocalFilePath"></param>
        /// <param name="Storage"></param>
        /// <param name="StorageArea"></param>
        /// <param name="Document"></param>
        /// <param name="attributeValue"></param>
        /// <returns></returns>
        /// <remarks>piuttosto di trovarsi in situazioni, che non dovrebbero succedere, di documenti
        /// nel transito aventi lo stesso nome di documenti nel definitivo e l'impossibilità di sovrascriverli,
        /// viene permesso la sovrascrittura
        /// </remarks>
        protected override long SaveDocument(string LocalFilePath, DocumentStorage Storage, DocumentStorageArea StorageArea, Document Document, System.ComponentModel.BindingList <DocumentAttributeValue> attributeValue)
        {
            string saveFileName = Path.Combine(GetStorageDir(Document.Storage, Document.StorageArea), GetFileName(Document));

            File.Copy(LocalFilePath, saveFileName, true);
            FileInfo     fInfo = new FileInfo(saveFileName);
            FileSecurity fSec  = null;

            if (Document.Permissions != null)
            {
                fSec = fInfo.GetAccessControl();
                AuthorizationRuleCollection fileRoles = fSec.GetAccessRules(true, true, typeof(NTAccount));
                foreach (AuthorizationRule item in fileRoles)
                {
                    fSec.RemoveAuditRuleAll(new FileSystemAuditRule(item.IdentityReference.ToString(), FileSystemRights.FullControl, AuditFlags.Success));
                }
                //
                foreach (var item in Document.Permissions)
                {
                    fSec.AddAccessRule(new FileSystemAccessRule(item.Name, FileSystemRights.Read, AccessControlType.Allow));
                }
                fInfo.SetAccessControl(fSec);
            }
            //Write attributes on file system
            WriteAttributes(Document);
            if (!fInfo.Exists)
            {
                throw new Exception();
            }

            return(fInfo.Length);
        }
예제 #2
0
        public void RemoveAuditRuleAll_Succeeds()
        {
            var auditRuleAppend = new FileSystemAuditRule(Helpers.s_LocalSystemNTAccount, FileSystemRights.AppendData,
                                                          AuditFlags.Success);
            var auditRuleWrite = new FileSystemAuditRule(Helpers.s_LocalSystemNTAccount,
                                                         FileSystemRights.Write, AuditFlags.Success);
            var auditRuleNetworkService = new FileSystemAuditRule(Helpers.s_NetworkServiceNTAccount,
                                                                  FileSystemRights.Read, AuditFlags.Failure);

            var fileSecurity = new FileSecurity();

            fileSecurity.AddAuditRule(auditRuleAppend);
            fileSecurity.AddAuditRule(auditRuleNetworkService);
            fileSecurity.RemoveAuditRuleAll(auditRuleWrite);
            AuthorizationRuleCollection rules =
                fileSecurity.GetAuditRules(true, true, typeof(System.Security.Principal.NTAccount));

            Assert.Equal(1, rules.Count);
            var existingAuditRule = (FileSystemAuditRule)rules[0];

            Assert.Equal(Helpers.s_NetworkServiceNTAccount, existingAuditRule.IdentityReference);
            Assert.Equal(FileSystemRights.Read, existingAuditRule.FileSystemRights);
            Assert.Equal(AuditFlags.Failure, existingAuditRule.AuditFlags);
        }