From 92645edcd33c8aad3f66aa067f47467ab995292c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Buratto?= <46575243+joaoburatto@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:36:11 -0300 Subject: [PATCH] Add bool to toggle set owner permission on server host --- .../SS3D/Permissions/PermissionSettings.cs | 14 ++++++++++++ .../Permissions/PermissionSettings.cs.meta | 3 +++ .../SS3D/Permissions/PermissionSystem.cs | 22 +++++++++++++++---- .../Systems/PlayerControl/PlayerSystem.cs | 5 ++++- Assets/Settings/ServerRoleSettings.asset | 17 ++++++++++++++ Assets/Settings/ServerRoleSettings.asset.meta | 8 +++++++ ProjectSettings/ProjectSettings.asset | 1 + 7 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 Assets/Scripts/SS3D/Permissions/PermissionSettings.cs create mode 100644 Assets/Scripts/SS3D/Permissions/PermissionSettings.cs.meta create mode 100644 Assets/Settings/ServerRoleSettings.asset create mode 100644 Assets/Settings/ServerRoleSettings.asset.meta diff --git a/Assets/Scripts/SS3D/Permissions/PermissionSettings.cs b/Assets/Scripts/SS3D/Permissions/PermissionSettings.cs new file mode 100644 index 0000000000..20d885520c --- /dev/null +++ b/Assets/Scripts/SS3D/Permissions/PermissionSettings.cs @@ -0,0 +1,14 @@ +using Coimbra; +using UnityEngine; + +namespace SS3D.Permissions +{ + [ProjectSettings("SS3D/Server")] + public class PermissionSettings : ScriptableSettings + { + [SerializeField] + private bool _addServerOwnerPermissionToServerHost; + + public static bool AddServerOwnerPermissionToServerHost => GetOrFind()._addServerOwnerPermissionToServerHost; + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Permissions/PermissionSettings.cs.meta b/Assets/Scripts/SS3D/Permissions/PermissionSettings.cs.meta new file mode 100644 index 0000000000..359cd9d0ae --- /dev/null +++ b/Assets/Scripts/SS3D/Permissions/PermissionSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f321f4b30171436abd45f5ecf17afa03 +timeCreated: 1695750532 \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Permissions/PermissionSystem.cs b/Assets/Scripts/SS3D/Permissions/PermissionSystem.cs index 417ffd4296..093fcea210 100644 --- a/Assets/Scripts/SS3D/Permissions/PermissionSystem.cs +++ b/Assets/Scripts/SS3D/Permissions/PermissionSystem.cs @@ -93,11 +93,25 @@ public bool TryGetUserRole(string ckey, out ServerRoleTypes userPermission) [Server] public void ChangeUserPermission(string ckey, ServerRoleTypes role) { + ServerRoleTypes previousRole = _userPermissions.TryGetValue(ckey, out ServerRoleTypes permission) ? permission : ServerRoleTypes.None; - throw new NotImplementedException(); - // TODO: This - // Add new user permission to list - // Add new user permission to text file + Punpun.Information(this, $"Updating user {ckey} role from {previousRole} to {role}"); + + _userPermissions[ckey] = role; + + SaveUserPermissions(); + } + + public void SaveUserPermissions() + { + string fileContent = string.Empty; + + foreach (KeyValuePair userPermission in _userPermissions) + { + fileContent += $"{userPermission.Key} {userPermission.Value.ToString()}\n"; + } + + File.WriteAllText(PermissionsPath, fileContent); } /// diff --git a/Assets/Scripts/SS3D/Systems/PlayerControl/PlayerSystem.cs b/Assets/Scripts/SS3D/Systems/PlayerControl/PlayerSystem.cs index 8abf8bfa7b..3a7f500ff8 100644 --- a/Assets/Scripts/SS3D/Systems/PlayerControl/PlayerSystem.cs +++ b/Assets/Scripts/SS3D/Systems/PlayerControl/PlayerSystem.cs @@ -1,3 +1,4 @@ +using Coimbra; using System.Collections.Generic; using System.Linq; using FishNet.Connection; @@ -176,8 +177,10 @@ private void ProcessAuthorizePlayer(NetworkConnection conn, UserAuthorizationMes player.SetCkey(ckey); - if (player.NetworkObject.Owner.IsHost) + if (conn.IsHost && PermissionSettings.AddServerOwnerPermissionToServerHost) { + Punpun.Information(this, $"Adding ServerOwner permission to server owner: {ckey}", Logs.ServerOnly, ckey); + Subsystems.Get().ChangeUserPermission(ckey, ServerRoleTypes.ServerOwner); } diff --git a/Assets/Settings/ServerRoleSettings.asset b/Assets/Settings/ServerRoleSettings.asset new file mode 100644 index 0000000000..49bfedf22e --- /dev/null +++ b/Assets/Settings/ServerRoleSettings.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f321f4b30171436abd45f5ecf17afa03, type: 3} + m_Name: ServerRoleSettings + m_EditorClassIdentifier: + _preload: 1 + _type: 2 + _addServerOwnerPermissionToServerHost: 1 diff --git a/Assets/Settings/ServerRoleSettings.asset.meta b/Assets/Settings/ServerRoleSettings.asset.meta new file mode 100644 index 0000000000..9c7c2b0e95 --- /dev/null +++ b/Assets/Settings/ServerRoleSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c15209f668bbfab479eb5184981c2bf7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index ffe99cfe79..e348d6df31 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -143,6 +143,7 @@ PlayerSettings: - {fileID: 11400000, guid: 3c59f55e6898e694083e7a1ede49fe18, type: 2} - {fileID: 11400000, guid: 2024dd0c65f45424f98ac0c8a6979181, type: 2} - {fileID: 11400000, guid: 97967903e9bd51b499aaa39639cc9bb2, type: 2} + - {fileID: 11400000, guid: c15209f668bbfab479eb5184981c2bf7, type: 2} metroInputSource: 0 wsaTransparentSwapchain: 0 m_HolographicPauseOnTrackingLoss: 1