add groups to individuals stuff
This commit is contained in:
2
MareAPI
2
MareAPI
Submodule MareAPI updated: b4b8ff4a52...395123f055
@@ -5,7 +5,6 @@ using MareSynchronosShared.Models;
|
|||||||
using MareSynchronosShared.Utils;
|
using MareSynchronosShared.Utils;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Text;
|
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace MareSynchronosServer.Hubs;
|
namespace MareSynchronosServer.Hubs;
|
||||||
@@ -116,6 +115,8 @@ public partial class MareHub
|
|||||||
.Include(u => u.OriginalFiles)
|
.Include(u => u.OriginalFiles)
|
||||||
.Include(u => u.AllowedIndividiuals)
|
.Include(u => u.AllowedIndividiuals)
|
||||||
.ThenInclude(u => u.AllowedUser)
|
.ThenInclude(u => u.AllowedUser)
|
||||||
|
.Include(u => u.AllowedIndividiuals)
|
||||||
|
.ThenInclude(u => u.AllowedGroup)
|
||||||
.Include(u => u.Poses)
|
.Include(u => u.Poses)
|
||||||
.AsSplitQuery()
|
.AsSplitQuery()
|
||||||
.Where(c => c.UploaderUID == UserUID).ToListAsync().ConfigureAwait(false);
|
.Where(c => c.UploaderUID == UserUID).ToListAsync().ConfigureAwait(false);
|
||||||
@@ -130,6 +131,8 @@ public partial class MareHub
|
|||||||
|
|
||||||
var allPairs = await GetAllPairInfo(UserUID).ConfigureAwait(false);
|
var allPairs = await GetAllPairInfo(UserUID).ConfigureAwait(false);
|
||||||
List<CharaData> sharedCharaData = [];
|
List<CharaData> sharedCharaData = [];
|
||||||
|
var groups = await DbContext.GroupPairs.Where(u => u.GroupUserUID == UserUID).Select(k => k.GroupGID).ToListAsync()
|
||||||
|
.ConfigureAwait(false);
|
||||||
foreach (var pair in allPairs.Where(p => !p.Value.OwnPermissions.IsPaused && !p.Value.OtherPermissions.IsPaused))
|
foreach (var pair in allPairs.Where(p => !p.Value.OwnPermissions.IsPaused && !p.Value.OtherPermissions.IsPaused))
|
||||||
{
|
{
|
||||||
var allSharedDataByPair = await DbContext.CharaData
|
var allSharedDataByPair = await DbContext.CharaData
|
||||||
@@ -146,19 +149,24 @@ public partial class MareHub
|
|||||||
|
|
||||||
foreach (var charaData in allSharedDataByPair)
|
foreach (var charaData in allSharedDataByPair)
|
||||||
{
|
{
|
||||||
if (await CheckCharaDataAllowance(charaData).ConfigureAwait(false))
|
if (await CheckCharaDataAllowance(charaData, groups).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
sharedCharaData.Add(charaData);
|
sharedCharaData.Add(charaData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ownGroups = await DbContext.GroupPairs.Where(u => u.GroupUserUID == UserUID)
|
||||||
|
.Select(k => k.GroupGID)
|
||||||
|
.ToListAsync()
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
var charaDataDirectlyShared = await DbContext.CharaData.Include(u => u.Files)
|
var charaDataDirectlyShared = await DbContext.CharaData.Include(u => u.Files)
|
||||||
.Include(u => u.OriginalFiles)
|
.Include(u => u.OriginalFiles)
|
||||||
.Include(u => u.AllowedIndividiuals)
|
.Include(u => u.AllowedIndividiuals)
|
||||||
.Include(u => u.Poses)
|
.Include(u => u.Poses)
|
||||||
.Include(u => u.Uploader)
|
.Include(u => u.Uploader)
|
||||||
.Where(p => p.ShareType == CharaDataShare.Shared && p.AllowedIndividiuals.Any(u => u.AllowedUserUID == UserUID))
|
.Where(p => p.ShareType == CharaDataShare.Shared && (p.AllowedIndividiuals.Any(u => u.AllowedUserUID == UserUID || ownGroups.Contains(u.AllowedGroupGID))))
|
||||||
.AsSplitQuery()
|
.AsSplitQuery()
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.ToListAsync()
|
.ToListAsync()
|
||||||
@@ -185,6 +193,8 @@ public partial class MareHub
|
|||||||
.Include(u => u.OriginalFiles)
|
.Include(u => u.OriginalFiles)
|
||||||
.Include(u => u.AllowedIndividiuals)
|
.Include(u => u.AllowedIndividiuals)
|
||||||
.ThenInclude(u => u.AllowedUser)
|
.ThenInclude(u => u.AllowedUser)
|
||||||
|
.Include(u => u.AllowedIndividiuals)
|
||||||
|
.ThenInclude(u => u.AllowedGroup)
|
||||||
.Include(u => u.FileSwaps)
|
.Include(u => u.FileSwaps)
|
||||||
.Include(u => u.Poses)
|
.Include(u => u.Poses)
|
||||||
.AsSplitQuery()
|
.AsSplitQuery()
|
||||||
@@ -239,29 +249,67 @@ public partial class MareHub
|
|||||||
|
|
||||||
if (updateDto.AllowedUsers != null)
|
if (updateDto.AllowedUsers != null)
|
||||||
{
|
{
|
||||||
var individuals = charaData.AllowedIndividiuals.ToList();
|
var individuals = charaData.AllowedIndividiuals.Where(k => k.AllowedGroup == null).ToList();
|
||||||
charaData.AllowedIndividiuals.Clear();
|
|
||||||
DbContext.RemoveRange(individuals);
|
|
||||||
var allowedUserList = updateDto.AllowedUsers.ToList();
|
var allowedUserList = updateDto.AllowedUsers.ToList();
|
||||||
foreach (var user in updateDto.AllowedUsers)
|
foreach (var user in updateDto.AllowedUsers)
|
||||||
{
|
{
|
||||||
var dbUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == user || u.Alias == user).ConfigureAwait(false);
|
if (charaData.AllowedIndividiuals.Any(k => k.AllowedUser != null && (string.Equals(k.AllowedUser.UID, user, StringComparison.Ordinal) || string.Equals(k.AllowedUser.Alias, user, StringComparison.Ordinal))))
|
||||||
if (dbUser != null)
|
|
||||||
{
|
{
|
||||||
if (!allowedUserList.Contains(dbUser.UID, StringComparer.Ordinal) && !allowedUserList.Contains(dbUser.Alias, StringComparer.Ordinal))
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var dbUser = await DbContext.Users.SingleOrDefaultAsync(u => u.UID == user || u.Alias == user).ConfigureAwait(false);
|
||||||
|
if (dbUser != null)
|
||||||
{
|
{
|
||||||
continue;
|
charaData.AllowedIndividiuals.Add(new CharaDataAllowance()
|
||||||
|
{
|
||||||
|
AllowedUser = dbUser,
|
||||||
|
Parent = charaData
|
||||||
|
});
|
||||||
}
|
}
|
||||||
allowedUserList.RemoveAll(u => string.Equals(u, dbUser.UID, StringComparison.Ordinal));
|
|
||||||
allowedUserList.RemoveAll(u => string.Equals(u, dbUser.Alias, StringComparison.Ordinal));
|
|
||||||
|
|
||||||
charaData.AllowedIndividiuals.Add(new CharaDataAllowance()
|
|
||||||
{
|
|
||||||
AllowedUser = dbUser,
|
|
||||||
Parent = charaData
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var dataUser in individuals.Where(k => !updateDto.AllowedUsers.Contains(k.AllowedUser.UID, StringComparer.Ordinal) && !updateDto.AllowedUsers.Contains(k.AllowedUser.Alias, StringComparer.Ordinal)))
|
||||||
|
{
|
||||||
|
DbContext.Remove(dataUser);
|
||||||
|
charaData.AllowedIndividiuals.Remove(dataUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
anyChanges = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updateDto.AllowedGroups != null)
|
||||||
|
{
|
||||||
|
var individualGroups = charaData.AllowedIndividiuals.Where(k => k.AllowedUser == null).ToList();
|
||||||
|
var allowedGroups = updateDto.AllowedGroups.ToList();
|
||||||
|
foreach (var user in updateDto.AllowedGroups)
|
||||||
|
{
|
||||||
|
if (charaData.AllowedIndividiuals.Any(k => k.AllowedGroup != null && (string.Equals(k.AllowedGroup.GID, user, StringComparison.Ordinal) || string.Equals(k.AllowedGroup.Alias, user, StringComparison.Ordinal))))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var dbUser = await DbContext.Groups.SingleOrDefaultAsync(u => u.GID == user || u.Alias == user).ConfigureAwait(false);
|
||||||
|
if (dbUser != null)
|
||||||
|
{
|
||||||
|
charaData.AllowedIndividiuals.Add(new CharaDataAllowance()
|
||||||
|
{
|
||||||
|
AllowedGroup = dbUser,
|
||||||
|
Parent = charaData
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var dataGroup in individualGroups.Where(k => !updateDto.AllowedGroups.Contains(k.AllowedGroup.GID, StringComparer.Ordinal) && !updateDto.AllowedGroups.Contains(k.AllowedGroup.Alias, StringComparer.Ordinal)))
|
||||||
|
{
|
||||||
|
DbContext.Remove(dataGroup);
|
||||||
|
charaData.AllowedIndividiuals.Remove(dataGroup);
|
||||||
|
}
|
||||||
|
|
||||||
anyChanges = true;
|
anyChanges = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,7 +459,8 @@ public partial class MareHub
|
|||||||
{
|
{
|
||||||
AccessType = GetAccessTypeDto(charaData.AccessType),
|
AccessType = GetAccessTypeDto(charaData.AccessType),
|
||||||
ShareType = GetShareTypeDto(charaData.ShareType),
|
ShareType = GetShareTypeDto(charaData.ShareType),
|
||||||
AllowedUsers = [.. charaData.AllowedIndividiuals.Select(u => new UserData(u.AllowedUser.UID, u.AllowedUser.Alias))],
|
AllowedUsers = [.. charaData.AllowedIndividiuals.Where(k => !string.IsNullOrEmpty(k.AllowedUserUID)).Select(u => new UserData(u.AllowedUser.UID, u.AllowedUser.Alias))],
|
||||||
|
AllowedGroups = [.. charaData.AllowedIndividiuals.Where(k => !string.IsNullOrEmpty(k.AllowedGroupGID)).Select(k => new GroupData(k.AllowedGroup.GID, k.AllowedGroup.Alias))],
|
||||||
CustomizeData = charaData.CustomizeData,
|
CustomizeData = charaData.CustomizeData,
|
||||||
Description = charaData.Description,
|
Description = charaData.Description,
|
||||||
ExpiryDate = charaData.ExpiryDate ?? DateTime.MaxValue,
|
ExpiryDate = charaData.ExpiryDate ?? DateTime.MaxValue,
|
||||||
@@ -477,7 +526,7 @@ public partial class MareHub
|
|||||||
_ => throw new NotSupportedException(),
|
_ => throw new NotSupportedException(),
|
||||||
};
|
};
|
||||||
|
|
||||||
private async Task<bool> CheckCharaDataAllowance(CharaData charaData)
|
private async Task<bool> CheckCharaDataAllowance(CharaData charaData, List<string> joinedGroups)
|
||||||
{
|
{
|
||||||
// check for self
|
// check for self
|
||||||
if (string.Equals(charaData.UploaderUID, UserUID, StringComparison.Ordinal))
|
if (string.Equals(charaData.UploaderUID, UserUID, StringComparison.Ordinal))
|
||||||
@@ -491,6 +540,9 @@ public partial class MareHub
|
|||||||
if (charaData.AllowedIndividiuals.Any(u => string.Equals(u.AllowedUserUID, UserUID, StringComparison.Ordinal)))
|
if (charaData.AllowedIndividiuals.Any(u => string.Equals(u.AllowedUserUID, UserUID, StringComparison.Ordinal)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (charaData.AllowedIndividiuals.Any(u => joinedGroups.Contains(u.AllowedGroupGID, StringComparer.Ordinal)))
|
||||||
|
return true;
|
||||||
|
|
||||||
var pairInfoUploader = await GetAllPairInfo(charaData.UploaderUID).ConfigureAwait(false);
|
var pairInfoUploader = await GetAllPairInfo(charaData.UploaderUID).ConfigureAwait(false);
|
||||||
|
|
||||||
// check for all pairs
|
// check for all pairs
|
||||||
@@ -543,7 +595,10 @@ public partial class MareHub
|
|||||||
throw new InvalidDataException($"No chara data with {id} found");
|
throw new InvalidDataException($"No chara data with {id} found");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!await CheckCharaDataAllowance(charaData).ConfigureAwait(false))
|
var groups = await DbContext.GroupPairs.Where(u => u.GroupUserUID == UserUID).Select(k => k.GroupGID).ToListAsync()
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
|
if (!await CheckCharaDataAllowance(charaData, groups).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
_logger.LogCallWarning(MareHubLogger.Args("UNAUTHORIZED", id));
|
_logger.LogCallWarning(MareHubLogger.Args("UNAUTHORIZED", id));
|
||||||
throw new UnauthorizedAccessException($"User is not allowed to download {id}");
|
throw new UnauthorizedAccessException($"User is not allowed to download {id}");
|
||||||
|
|||||||
@@ -136,7 +136,10 @@ public class MareDbContext : DbContext
|
|||||||
mb.Entity<CharaDataOriginalFile>().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.GamePath });
|
mb.Entity<CharaDataOriginalFile>().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.GamePath });
|
||||||
mb.Entity<CharaDataOriginalFile>().HasIndex(c => c.ParentId);
|
mb.Entity<CharaDataOriginalFile>().HasIndex(c => c.ParentId);
|
||||||
mb.Entity<CharaDataAllowance>().ToTable("chara_data_allowance");
|
mb.Entity<CharaDataAllowance>().ToTable("chara_data_allowance");
|
||||||
mb.Entity<CharaDataAllowance>().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.AllowedUserUID });
|
mb.Entity<CharaDataAllowance>().HasKey(c => new { c.ParentId, c.ParentUploaderUID, c.Id });
|
||||||
|
mb.Entity<CharaDataAllowance>().Property(p => p.Id).ValueGeneratedOnAdd();
|
||||||
mb.Entity<CharaDataAllowance>().HasIndex(c => c.ParentId);
|
mb.Entity<CharaDataAllowance>().HasIndex(c => c.ParentId);
|
||||||
|
mb.Entity<CharaDataAllowance>().HasOne(u => u.AllowedGroup).WithMany().HasForeignKey(u => u.AllowedGroupGID).OnDelete(DeleteBehavior.Cascade);
|
||||||
|
mb.Entity<CharaDataAllowance>().HasOne(u => u.AllowedUser).WithMany().HasForeignKey(u => u.AllowedUserUID).OnDelete(DeleteBehavior.Cascade);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
1094
MareSynchronosServer/MareSynchronosShared/Migrations/20250112111727_AllowedGroup.Designer.cs
generated
Normal file
1094
MareSynchronosServer/MareSynchronosShared/Migrations/20250112111727_AllowedGroup.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,98 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace MareSynchronosServer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class AllowedGroup : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropPrimaryKey(
|
||||||
|
name: "pk_chara_data_allowance",
|
||||||
|
table: "chara_data_allowance");
|
||||||
|
|
||||||
|
migrationBuilder.AlterColumn<string>(
|
||||||
|
name: "allowed_user_uid",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
type: "character varying(10)",
|
||||||
|
nullable: true,
|
||||||
|
oldClrType: typeof(string),
|
||||||
|
oldType: "character varying(10)");
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<long>(
|
||||||
|
name: "id",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
type: "bigint",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: 0L)
|
||||||
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "allowed_group_gid",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
type: "character varying(20)",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddPrimaryKey(
|
||||||
|
name: "pk_chara_data_allowance",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
columns: new[] { "parent_id", "parent_uploader_uid", "id" });
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "ix_chara_data_allowance_allowed_group_gid",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
column: "allowed_group_gid");
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "fk_chara_data_allowance_groups_allowed_group_gid",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
column: "allowed_group_gid",
|
||||||
|
principalTable: "groups",
|
||||||
|
principalColumn: "gid",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "fk_chara_data_allowance_groups_allowed_group_gid",
|
||||||
|
table: "chara_data_allowance");
|
||||||
|
|
||||||
|
migrationBuilder.DropPrimaryKey(
|
||||||
|
name: "pk_chara_data_allowance",
|
||||||
|
table: "chara_data_allowance");
|
||||||
|
|
||||||
|
migrationBuilder.DropIndex(
|
||||||
|
name: "ix_chara_data_allowance_allowed_group_gid",
|
||||||
|
table: "chara_data_allowance");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "id",
|
||||||
|
table: "chara_data_allowance");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "allowed_group_gid",
|
||||||
|
table: "chara_data_allowance");
|
||||||
|
|
||||||
|
migrationBuilder.AlterColumn<string>(
|
||||||
|
name: "allowed_user_uid",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
type: "character varying(10)",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: "",
|
||||||
|
oldClrType: typeof(string),
|
||||||
|
oldType: "character varying(10)",
|
||||||
|
oldNullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddPrimaryKey(
|
||||||
|
name: "pk_chara_data_allowance",
|
||||||
|
table: "chara_data_allowance",
|
||||||
|
columns: new[] { "parent_id", "parent_uploader_uid", "allowed_user_uid" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@ namespace MareSynchronosServer.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "8.0.10")
|
.HasAnnotation("ProductVersion", "9.0.0")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
@@ -165,13 +165,27 @@ namespace MareSynchronosServer.Migrations
|
|||||||
.HasColumnType("character varying(10)")
|
.HasColumnType("character varying(10)")
|
||||||
.HasColumnName("parent_uploader_uid");
|
.HasColumnName("parent_uploader_uid");
|
||||||
|
|
||||||
|
b.Property<long>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("bigint")
|
||||||
|
.HasColumnName("id");
|
||||||
|
|
||||||
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
||||||
|
|
||||||
|
b.Property<string>("AllowedGroupGID")
|
||||||
|
.HasColumnType("character varying(20)")
|
||||||
|
.HasColumnName("allowed_group_gid");
|
||||||
|
|
||||||
b.Property<string>("AllowedUserUID")
|
b.Property<string>("AllowedUserUID")
|
||||||
.HasColumnType("character varying(10)")
|
.HasColumnType("character varying(10)")
|
||||||
.HasColumnName("allowed_user_uid");
|
.HasColumnName("allowed_user_uid");
|
||||||
|
|
||||||
b.HasKey("ParentId", "ParentUploaderUID", "AllowedUserUID")
|
b.HasKey("ParentId", "ParentUploaderUID", "Id")
|
||||||
.HasName("pk_chara_data_allowance");
|
.HasName("pk_chara_data_allowance");
|
||||||
|
|
||||||
|
b.HasIndex("AllowedGroupGID")
|
||||||
|
.HasDatabaseName("ix_chara_data_allowance_allowed_group_gid");
|
||||||
|
|
||||||
b.HasIndex("AllowedUserUID")
|
b.HasIndex("AllowedUserUID")
|
||||||
.HasDatabaseName("ix_chara_data_allowance_allowed_user_uid");
|
.HasDatabaseName("ix_chara_data_allowance_allowed_user_uid");
|
||||||
|
|
||||||
@@ -799,11 +813,16 @@ namespace MareSynchronosServer.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("MareSynchronosShared.Models.CharaDataAllowance", b =>
|
modelBuilder.Entity("MareSynchronosShared.Models.CharaDataAllowance", b =>
|
||||||
{
|
{
|
||||||
|
b.HasOne("MareSynchronosShared.Models.Group", "AllowedGroup")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("AllowedGroupGID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.HasConstraintName("fk_chara_data_allowance_groups_allowed_group_gid");
|
||||||
|
|
||||||
b.HasOne("MareSynchronosShared.Models.User", "AllowedUser")
|
b.HasOne("MareSynchronosShared.Models.User", "AllowedUser")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("AllowedUserUID")
|
.HasForeignKey("AllowedUserUID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired()
|
|
||||||
.HasConstraintName("fk_chara_data_allowance_users_allowed_user_uid");
|
.HasConstraintName("fk_chara_data_allowance_users_allowed_user_uid");
|
||||||
|
|
||||||
b.HasOne("MareSynchronosShared.Models.CharaData", "Parent")
|
b.HasOne("MareSynchronosShared.Models.CharaData", "Parent")
|
||||||
@@ -813,6 +832,8 @@ namespace MareSynchronosServer.Migrations
|
|||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasConstraintName("fk_chara_data_allowance_chara_data_parent_id_parent_uploader_u");
|
.HasConstraintName("fk_chara_data_allowance_chara_data_parent_id_parent_uploader_u");
|
||||||
|
|
||||||
|
b.Navigation("AllowedGroup");
|
||||||
|
|
||||||
b.Navigation("AllowedUser");
|
b.Navigation("AllowedUser");
|
||||||
|
|
||||||
b.Navigation("Parent");
|
b.Navigation("Parent");
|
||||||
|
|||||||
@@ -40,11 +40,15 @@ public class CharaData
|
|||||||
|
|
||||||
public class CharaDataAllowance
|
public class CharaDataAllowance
|
||||||
{
|
{
|
||||||
|
[Key]
|
||||||
|
public long Id { get; set; }
|
||||||
public virtual CharaData Parent { get; set; }
|
public virtual CharaData Parent { get; set; }
|
||||||
public string ParentId { get; set; }
|
public string ParentId { get; set; }
|
||||||
public string ParentUploaderUID { get; set; }
|
public string ParentUploaderUID { get; set; }
|
||||||
public virtual User AllowedUser { get; set; }
|
public virtual User? AllowedUser { get; set; }
|
||||||
public string AllowedUserUID { get; set; }
|
public string? AllowedUserUID { get; set; }
|
||||||
|
public virtual Group? AllowedGroup { get; set; }
|
||||||
|
public string? AllowedGroupGID { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CharaDataOriginalFile
|
public class CharaDataOriginalFile
|
||||||
|
|||||||
Reference in New Issue
Block a user