public void SetShare(FileShareRecord r)
 {
     using (var securityDao = TryGetSecurityDao())
     {
         securityDao.SetShare(r);
     }
 }
        public void SetShare(FileShareRecord r)
        {
            using (var DbManager = GetDbManager())
            {
                if (r.Share == FileShare.None)
                {
                    using (var tx = DbManager.BeginTransaction())
                    {
                        var files = new List <object>();

                        if (r.EntryType == FileEntryType.Folder)
                        {
                            var folders =
                                DbManager.ExecuteList(new SqlQuery("files_folder_tree").Select("folder_id").Where("parent_id", r.EntryId))
                                .ConvertAll(o => (int)o[0]);
                            files.AddRange(DbManager.ExecuteList(Query("files_file").Select("id").Where(Exp.In("folder_id", folders))).
                                           ConvertAll(o => o[0]));

                            var d1 = new SqlDelete("files_security")
                                     .Where("tenant_id", r.Tenant)
                                     .Where(Exp.In("entry_id", folders))
                                     .Where("entry_type", (int)FileEntryType.Folder)
                                     .Where("subject", r.Subject.ToString());

                            DbManager.ExecuteNonQuery(d1);
                        }
                        else
                        {
                            files.Add(r.EntryId);
                        }

                        if (0 < files.Count)
                        {
                            var d2 = new SqlDelete("files_security")
                                     .Where("tenant_id", r.Tenant)
                                     .Where(Exp.In("entry_id", files))
                                     .Where("entry_type", (int)FileEntryType.File)
                                     .Where("subject", r.Subject.ToString());

                            DbManager.ExecuteNonQuery(d2);
                        }

                        tx.Commit();
                    }
                }
                else
                {
                    var i = new SqlInsert("files_security", true)
                            .InColumnValue("tenant_id", r.Tenant)
                            .InColumnValue("entry_id", r.EntryId)
                            .InColumnValue("entry_type", (int)r.EntryType)
                            .InColumnValue("subject", r.Subject.ToString())
                            .InColumnValue("owner", r.Owner.ToString())
                            .InColumnValue("security", (int)r.Share)
                            .InColumnValue("timestamp", DateTime.UtcNow);

                    DbManager.ExecuteNonQuery(i);
                }
            }
        }
        private FileShareRecord ToFileShareRecord(object[] r)
        {
            var result = new FileShareRecord
            {
                Tenant    = Convert.ToInt32(r[0]),
                EntryId   = MappingID(r[1]),
                EntryType = (FileEntryType)Convert.ToInt32(r[2]),
                Subject   = new Guid((string)r[3]),
                Owner     = new Guid((string)r[4]),
                Share     = (FileShare)Convert.ToInt32(r[5]),
                Level     = 6 < r.Length ? Convert.ToInt32(r[6]) : 0,
            };


            return(result);
        }
        public void SetShare(FileShareRecord r)
        {
            using (var db = GetDb())
                using (var tx = db.BeginTransaction())
                {
                    if (r.Share == FileShare.None)
                    {
                        if (r.EntryType == FileEntryType.Folder)
                        {
                            var entryIDs = db.ExecuteList(Query("files_thirdparty_id_mapping")
                                                          .Select("hash_id")
                                                          .Where(Exp.Like("id", r.EntryId.ToString(), SqlLike.StartWith)))
                                           .ConvertAll(x => x[0]);

                            db.ExecuteNonQuery(Delete("files_security")
                                               .Where(Exp.In("entry_id", entryIDs) &
                                                      Exp.Eq("subject", r.Subject.ToString())));
                        }
                        else
                        {
                            var d2 = Delete("files_security")
                                     .Where(Exp.Eq("entry_id", MappingID(r.EntryId, true)))
                                     .Where("entry_type", (int)FileEntryType.File)
                                     .Where("subject", r.Subject.ToString());

                            db.ExecuteNonQuery(d2);
                        }
                    }
                    else
                    {
                        var i = new SqlInsert("files_security", true)
                                .InColumnValue("tenant_id", r.Tenant)
                                .InColumnValue("entry_id", MappingID(r.EntryId, true))
                                .InColumnValue("entry_type", (int)r.EntryType)
                                .InColumnValue("subject", r.Subject.ToString())
                                .InColumnValue("owner", r.Owner.ToString())
                                .InColumnValue("security", (int)r.Share)
                                .InColumnValue("timestamp", DateTime.UtcNow);

                        db.ExecuteNonQuery(i);
                    }

                    tx.Commit();
                }
        }
Beispiel #5
0
        private FileShareRecord ToFileShareRecord(object[] r)
        {
            var result = new FileShareRecord
            {
                Tenant    = Convert.ToInt32(r[0]),
                EntryId   = r[1],
                EntryType = (FileEntryType)Convert.ToInt32(r[2]),
                Subject   = new Guid((string)r[3]),
                Owner     = new Guid((string)r[4]),
                Share     = (FileShare)Convert.ToInt32(r[5]),
                Level     = 6 < r.Length ? Convert.ToInt32(r[6]) : 0,
            };

            int pureID;

            if (int.TryParse(r[1].ToString(), out pureID))
            {
                result.EntryId = pureID;
            }

            return(result);
        }
 public void SetShare(FileShareRecord r)
 {
 }
Beispiel #7
0
        public void SetShare(FileShareRecord r)
        {
            if (r.Share == FileShare.None)
            {
                var entryId = (MappingID(r.EntryId) ?? "").ToString();
                if (string.IsNullOrEmpty(entryId))
                {
                    return;
                }

                using (var tx = dbManager.BeginTransaction())
                {
                    var files = new List <string>();

                    if (r.EntryType == FileEntryType.Folder)
                    {
                        var folders = new List <string>();
                        int intEntryId;
                        if (int.TryParse(entryId, out intEntryId))
                        {
                            var foldersInt = dbManager.ExecuteList(new SqlQuery("files_folder_tree").Select("folder_id").Where("parent_id", entryId))
                                             .ConvertAll(o => o[0]);
                            folders.AddRange(foldersInt.Select(folderInt => folderInt.ToString()));
                            files.AddRange(dbManager.ExecuteList(Query("files_file").Select("id").Where(Exp.In("folder_id", foldersInt))).
                                           ConvertAll(o => o[0].ToString()));
                        }
                        else
                        {
                            folders.Add(entryId);
                        }

                        var d1 = new SqlDelete("files_security")
                                 .Where("tenant_id", r.Tenant)
                                 .Where(Exp.In("entry_id", folders))
                                 .Where("entry_type", (int)FileEntryType.Folder)
                                 .Where("subject", r.Subject.ToString());

                        dbManager.ExecuteNonQuery(d1);
                    }
                    else
                    {
                        files.Add(entryId);
                    }

                    if (0 < files.Count)
                    {
                        var d2 = new SqlDelete("files_security")
                                 .Where("tenant_id", r.Tenant)
                                 .Where(Exp.In("entry_id", files))
                                 .Where("entry_type", (int)FileEntryType.File)
                                 .Where("subject", r.Subject.ToString());

                        dbManager.ExecuteNonQuery(d2);
                    }

                    tx.Commit();
                }
            }
            else
            {
                var i = new SqlInsert("files_security", true)
                        .InColumnValue("tenant_id", r.Tenant)
                        .InColumnValue("entry_id", MappingID(r.EntryId, true).ToString())
                        .InColumnValue("entry_type", (int)r.EntryType)
                        .InColumnValue("subject", r.Subject.ToString())
                        .InColumnValue("owner", r.Owner.ToString())
                        .InColumnValue("security", (int)r.Share)
                        .InColumnValue("timestamp", DateTime.UtcNow);

                dbManager.ExecuteNonQuery(i);
            }
        }
Beispiel #8
0
        public void SetShare(FileShareRecord r)
        {
            if (r.Share == FileShare.None)
            {
                var entryId = (MappingID(r.EntryId) ?? "").ToString();
                if (string.IsNullOrEmpty(entryId))
                {
                    return;
                }

                using (var tx = FilesDbContext.Database.BeginTransaction())
                {
                    var files = new List <string>();

                    if (r.EntryType == FileEntryType.Folder)
                    {
                        var folders = new List <string>();
                        if (int.TryParse(entryId, out var intEntryId))
                        {
                            var foldersInt = FilesDbContext.Tree
                                             .Where(r => r.ParentId.ToString() == entryId)
                                             .Select(r => r.FolderId)
                                             .ToList();

                            folders.AddRange(foldersInt.Select(folderInt => folderInt.ToString()));
                            files.AddRange(Query(FilesDbContext.Files).Where(r => foldersInt.Any(a => a == r.FolderId)).Select(r => r.Id.ToString()));
                        }
                        else
                        {
                            folders.Add(entryId);
                        }

                        var toDelete = FilesDbContext.Security
                                       .Where(a => a.TenantId == r.Tenant)
                                       .Where(a => folders.Any(b => b == a.EntryId))
                                       .Where(a => a.EntryType == FileEntryType.Folder)
                                       .Where(a => a.Subject == r.Subject);

                        FilesDbContext.Security.RemoveRange(toDelete);
                        FilesDbContext.SaveChanges();
                    }
                    else
                    {
                        files.Add(entryId);
                    }

                    if (0 < files.Count)
                    {
                        var toDelete = FilesDbContext.Security
                                       .Where(a => a.TenantId == r.Tenant)
                                       .Where(a => files.Any(b => b == a.EntryId))
                                       .Where(a => a.EntryType == FileEntryType.File)
                                       .Where(a => a.Subject == r.Subject);

                        FilesDbContext.Security.RemoveRange(toDelete);
                        FilesDbContext.SaveChanges();
                    }

                    tx.Commit();
                }
            }
            else
            {
                var toInsert = new DbFilesSecurity
                {
                    TenantId  = r.Tenant,
                    EntryId   = MappingID(r.EntryId, true).ToString(),
                    EntryType = r.EntryType,
                    Subject   = r.Subject,
                    Owner     = r.Owner,
                    Security  = r.Share,
                    TimeStamp = DateTime.UtcNow
                };

                FilesDbContext.AddOrUpdate(r => r.Security, toInsert);
                FilesDbContext.SaveChanges();
            }
        }
Beispiel #9
0
        public void SetShare(FileShareRecord r)
        {
            var selector = GetSelector(r.EntryId);

            selector.GetSecurityDao(r.EntryId).SetShare(r);
        }
Beispiel #10
0
 public void SetShare(FileShareRecord r)
 {
     SecurityDao.SetShare(r);
 }
 public void SetShare(FileShareRecord r)
 {
     TryGetSecurityDao().SetShare(r);
 }