mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 15:08:47 -07:00
fd2153d82b
- Room roles: list the creator as Creator (255), not CoOwner (30). The
client takes the local role from the Roles list and only lets a player
edit roles below their own (Creator excepted), so the creator could not
edit Co-Owner and Creator permissions. Enforce the role ladder on the
server (RoomRoleRules), let invitees accept (PUT roles/{me} role=30) and
reject (PUT roles/{me}/invite role=0), send message Types 62/60/61, and
push RoomUpdate after every role change.
- Permissions: persist PUT subrooms/{sub}/permissions cells in a new
RoomRolePermissions table, serve them from photon_access_token (plus a
roomserver/ twin) and push PhotonAccessToken to the sub-room.
- Publish: player-owned rooms are never IsRRO on the wire; the client
hides Publish and every room setting for an RRO.
- Sub-rooms: wire SubRoomId = OrderIndex + 1 (the client will not load a
sub-room with id 0), new rooms always get a named Home sub-room, and a
startup pass repairs rooms without one.
- Instance browser: per-room Redis presence index, live players only,
private instances for the people allowed in, real IsFull.
- Room/sub-room settings: creator or accepted co-owner everywhere.
50 lines
2.0 KiB
C#
50 lines
2.0 KiB
C#
using System;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
|
|
#nullable disable
|
|
|
|
namespace DorkNet.Server.Migrations
|
|
{
|
|
/// <inheritdoc />
|
|
public partial class RoomRolePermissions : Migration
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.CreateTable(
|
|
name: "RoomRolePermissions",
|
|
columns: table => new
|
|
{
|
|
Id = table.Column<long>(type: "INTEGER", nullable: false)
|
|
.Annotation("Sqlite:Autoincrement", true),
|
|
RoomId = table.Column<long>(type: "INTEGER", nullable: false),
|
|
SubRoomId = table.Column<long>(type: "INTEGER", nullable: false),
|
|
Role = table.Column<int>(type: "INTEGER", nullable: false),
|
|
Permission = table.Column<string>(type: "TEXT", maxLength: 128, nullable: false),
|
|
Type = table.Column<int>(type: "INTEGER", nullable: false),
|
|
Override = table.Column<bool>(type: "INTEGER", nullable: false),
|
|
Value = table.Column<string>(type: "TEXT", maxLength: 4096, nullable: false),
|
|
UpdatedByPlayerId = table.Column<long>(type: "INTEGER", nullable: false),
|
|
UpdatedAt = table.Column<DateTime>(type: "TEXT", nullable: false)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_RoomRolePermissions", x => x.Id);
|
|
});
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_RoomRolePermissions_RoomId_SubRoomId_Role_Permission",
|
|
table: "RoomRolePermissions",
|
|
columns: new[] { "RoomId", "SubRoomId", "Role", "Permission" },
|
|
unique: true);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.DropTable(
|
|
name: "RoomRolePermissions");
|
|
}
|
|
}
|
|
}
|