Add job whitelist system (#28085)

* Add job whitelist system

* Address reviews

* Fix name

* Apply suggestions from code review

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>

* cancinium

---------

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
This commit is contained in:
DrSmugleaf
2024-06-01 05:08:31 -07:00
committed by GitHub
parent e3a66136bf
commit 19be94c9ea
35 changed files with 4666 additions and 47 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
#nullable disable
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace Content.Server.Database.Migrations.Postgres
{
/// <inheritdoc />
public partial class RoleWhitelist : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "role_whitelists",
columns: table => new
{
player_user_id = table.Column<Guid>(type: "uuid", nullable: false),
role_id = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_role_whitelists", x => new { x.player_user_id, x.role_id });
table.ForeignKey(
name: "FK_role_whitelists_player_player_user_id",
column: x => x.player_user_id,
principalTable: "player",
principalColumn: "user_id",
onDelete: ReferentialAction.Cascade);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "role_whitelists");
}
}
}

View File

@@ -900,6 +900,22 @@ namespace Content.Server.Database.Migrations.Postgres
b.ToTable("profile_role_loadout", (string)null);
});
modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b =>
{
b.Property<Guid>("PlayerUserId")
.HasColumnType("uuid")
.HasColumnName("player_user_id");
b.Property<string>("RoleId")
.HasColumnType("text")
.HasColumnName("role_id");
b.HasKey("PlayerUserId", "RoleId")
.HasName("PK_role_whitelists");
b.ToTable("role_whitelists", (string)null);
});
modelBuilder.Entity("Content.Server.Database.Round", b =>
{
b.Property<int>("Id")
@@ -1623,6 +1639,19 @@ namespace Content.Server.Database.Migrations.Postgres
b.Navigation("Profile");
});
modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b =>
{
b.HasOne("Content.Server.Database.Player", "Player")
.WithMany("JobWhitelists")
.HasForeignKey("PlayerUserId")
.HasPrincipalKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("FK_role_whitelists_player_player_user_id");
b.Navigation("Player");
});
modelBuilder.Entity("Content.Server.Database.Round", b =>
{
b.HasOne("Content.Server.Database.Server", "Server")
@@ -1822,6 +1851,8 @@ namespace Content.Server.Database.Migrations.Postgres
b.Navigation("AdminWatchlistsLastEdited");
b.Navigation("AdminWatchlistsReceived");
b.Navigation("JobWhitelists");
});
modelBuilder.Entity("Content.Server.Database.Preference", b =>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
#nullable disable
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace Content.Server.Database.Migrations.Sqlite
{
/// <inheritdoc />
public partial class RoleWhitelist : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "role_whitelists",
columns: table => new
{
player_user_id = table.Column<Guid>(type: "TEXT", nullable: false),
role_id = table.Column<string>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_role_whitelists", x => new { x.player_user_id, x.role_id });
table.ForeignKey(
name: "FK_role_whitelists_player_player_user_id",
column: x => x.player_user_id,
principalTable: "player",
principalColumn: "user_id",
onDelete: ReferentialAction.Cascade);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "role_whitelists");
}
}
}

View File

@@ -847,6 +847,22 @@ namespace Content.Server.Database.Migrations.Sqlite
b.ToTable("profile_role_loadout", (string)null);
});
modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b =>
{
b.Property<Guid>("PlayerUserId")
.HasColumnType("TEXT")
.HasColumnName("player_user_id");
b.Property<string>("RoleId")
.HasColumnType("TEXT")
.HasColumnName("role_id");
b.HasKey("PlayerUserId", "RoleId")
.HasName("PK_role_whitelists");
b.ToTable("role_whitelists", (string)null);
});
modelBuilder.Entity("Content.Server.Database.Round", b =>
{
b.Property<int>("Id")
@@ -1548,6 +1564,19 @@ namespace Content.Server.Database.Migrations.Sqlite
b.Navigation("Profile");
});
modelBuilder.Entity("Content.Server.Database.RoleWhitelist", b =>
{
b.HasOne("Content.Server.Database.Player", "Player")
.WithMany("JobWhitelists")
.HasForeignKey("PlayerUserId")
.HasPrincipalKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("FK_role_whitelists_player_player_user_id");
b.Navigation("Player");
});
modelBuilder.Entity("Content.Server.Database.Round", b =>
{
b.HasOne("Content.Server.Database.Server", "Server")
@@ -1747,6 +1776,8 @@ namespace Content.Server.Database.Migrations.Sqlite
b.Navigation("AdminWatchlistsLastEdited");
b.Navigation("AdminWatchlistsReceived");
b.Navigation("JobWhitelists");
});
modelBuilder.Entity("Content.Server.Database.Preference", b =>

View File

@@ -40,6 +40,7 @@ namespace Content.Server.Database
public DbSet<AdminNote> AdminNotes { get; set; } = null!;
public DbSet<AdminWatchlist> AdminWatchlists { get; set; } = null!;
public DbSet<AdminMessage> AdminMessages { get; set; } = null!;
public DbSet<RoleWhitelist> RoleWhitelists { get; set; } = null!;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@@ -314,6 +315,13 @@ namespace Content.Server.Database
.HasForeignKey(ban => ban.LastEditedById)
.HasPrincipalKey(author => author.UserId)
.OnDelete(DeleteBehavior.SetNull);
modelBuilder.Entity<RoleWhitelist>()
.HasOne(w => w.Player)
.WithMany(p => p.JobWhitelists)
.HasForeignKey(w => w.PlayerUserId)
.HasPrincipalKey(p => p.UserId)
.OnDelete(DeleteBehavior.Cascade);
}
public virtual IQueryable<AdminLog> SearchLogs(IQueryable<AdminLog> query, string searchText)
@@ -530,6 +538,7 @@ namespace Content.Server.Database
public List<ServerBan> AdminServerBansLastEdited { get; set; } = null!;
public List<ServerRoleBan> AdminServerRoleBansCreated { get; set; } = null!;
public List<ServerRoleBan> AdminServerRoleBansLastEdited { get; set; } = null!;
public List<RoleWhitelist> JobWhitelists { get; set; } = null!;
}
[Table("whitelist")]
@@ -1099,4 +1108,15 @@ namespace Content.Server.Database
/// </summary>
public bool Dismissed { get; set; }
}
[PrimaryKey(nameof(PlayerUserId), nameof(RoleId))]
public class RoleWhitelist
{
[Required, ForeignKey("Player")]
public Guid PlayerUserId { get; set; }
public Player Player { get; set; } = default!;
[Required]
public string RoleId { get; set; } = default!;
}
}