Files: added subject type, files link options

This commit is contained in:
Maksim Chegulov 2022-09-08 18:05:33 +03:00
parent 47600daa03
commit 8dfe176414
10 changed files with 5508 additions and 1 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ASC.Migrations.MySql.Migrations.FilesDb
{
public partial class FilesDbContext_Upgrade2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "options",
table: "files_security",
type: "text",
nullable: true,
collation: "utf8_general_ci")
.Annotation("MySql:CharSet", "utf8");
migrationBuilder.AddColumn<int>(
name: "subject_type",
table: "files_security",
type: "int",
nullable: false,
defaultValue: 0);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "options",
table: "files_security");
migrationBuilder.DropColumn(
name: "subject_type",
table: "files_security");
}
}
}

View File

@ -2301,6 +2301,12 @@ namespace ASC.Migrations.MySql.Migrations.FilesDb
.UseCollation("utf8_general_ci") .UseCollation("utf8_general_ci")
.HasAnnotation("MySql:CharSet", "utf8"); .HasAnnotation("MySql:CharSet", "utf8");
b.Property<string>("FileShareOptions")
.HasColumnType("text")
.HasColumnName("options")
.UseCollation("utf8_general_ci")
.HasAnnotation("MySql:CharSet", "utf8");
b.Property<string>("Owner") b.Property<string>("Owner")
.IsRequired() .IsRequired()
.HasColumnType("char(38)") .HasColumnType("char(38)")
@ -2312,6 +2318,10 @@ namespace ASC.Migrations.MySql.Migrations.FilesDb
.HasColumnType("int") .HasColumnType("int")
.HasColumnName("security"); .HasColumnName("security");
b.Property<int>("SubjectType")
.HasColumnType("int")
.HasColumnName("subject_type");
b.Property<DateTime>("TimeStamp") b.Property<DateTime>("TimeStamp")
.HasColumnType("timestamp") .HasColumnType("timestamp")
.HasColumnName("timestamp"); .HasColumnName("timestamp");

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ASC.Migrations.PostgreSql.Migrations.FilesDb
{
public partial class FilesDbContext_Upgrade2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "options",
schema: "onlyoffice",
table: "files_security",
type: "text",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "subject_type",
schema: "onlyoffice",
table: "files_security",
type: "integer",
nullable: false,
defaultValue: 0);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "options",
schema: "onlyoffice",
table: "files_security");
migrationBuilder.DropColumn(
name: "subject_type",
schema: "onlyoffice",
table: "files_security");
}
}
}

View File

@ -2261,6 +2261,10 @@ namespace ASC.Migrations.PostgreSql.Migrations
.HasColumnName("subject") .HasColumnName("subject")
.IsFixedLength(); .IsFixedLength();
b.Property<string>("FileShareOptions")
.HasColumnType("text")
.HasColumnName("options");
b.Property<Guid>("Owner") b.Property<Guid>("Owner")
.HasMaxLength(38) .HasMaxLength(38)
.HasColumnType("uuid") .HasColumnType("uuid")
@ -2271,6 +2275,10 @@ namespace ASC.Migrations.PostgreSql.Migrations
.HasColumnType("integer") .HasColumnType("integer")
.HasColumnName("security"); .HasColumnName("security");
b.Property<int>("SubjectType")
.HasColumnType("integer")
.HasColumnName("subject_type");
b.Property<DateTime>("TimeStamp") b.Property<DateTime>("TimeStamp")
.ValueGeneratedOnAdd() .ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone") .HasColumnType("timestamp with time zone")

View File

@ -33,10 +33,12 @@ public class DbFilesSecurity : BaseEntity, IDbFile, IMapFrom<FileShareRecord>
public int TenantId { get; set; } public int TenantId { get; set; }
public string EntryId { get; set; } public string EntryId { get; set; }
public FileEntryType EntryType { get; set; } public FileEntryType EntryType { get; set; }
public SubjectType SubjectType { get; set; }
public Guid Subject { get; set; } public Guid Subject { get; set; }
public Guid Owner { get; set; } public Guid Owner { get; set; }
public FileShare Share { get; set; } public FileShare Share { get; set; }
public DateTime TimeStamp { get; set; } public DateTime TimeStamp { get; set; }
public string FileShareOptions { get; set; }
public override object[] GetKeys() public override object[] GetKeys()
{ {
@ -46,7 +48,8 @@ public class DbFilesSecurity : BaseEntity, IDbFile, IMapFrom<FileShareRecord>
public void Mapping(Profile profile) public void Mapping(Profile profile)
{ {
profile.CreateMap<FileShareRecord, DbFilesSecurity>() profile.CreateMap<FileShareRecord, DbFilesSecurity>()
.ForMember(dest => dest.TimeStamp, opt => opt.MapFrom(src => DateTime.UtcNow)); .ForMember(dest => dest.TimeStamp, opt => opt.MapFrom(src => DateTime.UtcNow))
.ForMember(dest => dest.FileShareOptions, opt => opt.MapFrom(src => JsonSerializer.Serialize(src.FileShareOptions, new JsonSerializerOptions())));
} }
} }
@ -105,6 +108,14 @@ public static class DbFilesSecurityExtension
entity.Property(e => e.TimeStamp) entity.Property(e => e.TimeStamp)
.HasColumnName("timestamp") .HasColumnName("timestamp")
.HasColumnType("timestamp"); .HasColumnType("timestamp");
entity.Property(e => e.SubjectType).HasColumnName("subject_type");
entity.Property(e => e.FileShareOptions)
.HasColumnName("options")
.HasColumnType("text")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
}); });
} }
public static void PgSqlAddDbFilesSecurity(this ModelBuilder modelBuilder) public static void PgSqlAddDbFilesSecurity(this ModelBuilder modelBuilder)
@ -146,6 +157,10 @@ public static class DbFilesSecurityExtension
entity.Property(e => e.TimeStamp) entity.Property(e => e.TimeStamp)
.HasColumnName("timestamp") .HasColumnName("timestamp")
.HasDefaultValueSql("CURRENT_TIMESTAMP"); .HasDefaultValueSql("CURRENT_TIMESTAMP");
entity.Property(e => e.SubjectType).HasColumnName("subject_type");
entity.Property(e => e.FileShareOptions).HasColumnName("options");
}); });
} }

View File

@ -0,0 +1,34 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Files.Core.Security;
[Serializable]
public class FileShareOptions
{
public string Title { get; set; }
public DateTime ExpirationDate { get; set; }
}

View File

@ -31,11 +31,19 @@ public class FileShareRecord : IMapFrom<DbFilesSecurity>
public int TenantId { get; set; } public int TenantId { get; set; }
public object EntryId { get; set; } public object EntryId { get; set; }
public FileEntryType EntryType { get; set; } public FileEntryType EntryType { get; set; }
public SubjectType SubjectType { get; set; }
public Guid Subject { get; set; } public Guid Subject { get; set; }
public Guid Owner { get; set; } public Guid Owner { get; set; }
public FileShare Share { get; set; } public FileShare Share { get; set; }
public FileShareOptions FileShareOptions { get; set; }
public int Level { get; set; } public int Level { get; set; }
public void Mapping(AutoMapper.Profile profile)
{
profile.CreateMap<DbFilesSecurity, FileShareRecord>()
.ForMember(dest => dest.FileShareOptions, opt => opt.MapFrom(src => JsonSerializer.Deserialize<FileShareOptions>(src.FileShareOptions, new JsonSerializerOptions())));
}
public class ShareComparer : IComparer<FileShare> public class ShareComparer : IComparer<FileShare>
{ {
private static readonly int[] _shareOrder = new[] private static readonly int[] _shareOrder = new[]

View File

@ -0,0 +1,35 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Files.Core.Security;
public enum SubjectType
{
UserOrGroup = 0,
ExternalLink = 1,
Restriction = 2,
InvintationLink = 3,
}