Skip to content

Commit 18234c7

Browse files
author
Matthew Bate
committed
Updated Permission Roles functionality.
1 parent a6e7865 commit 18234c7

File tree

11 files changed

+176
-15
lines changed

11 files changed

+176
-15
lines changed

BHD-ServerManager/API/Controllers/AdminController.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class AdminController : ControllerBase
1414
[HttpPost("create")]
1515
public ActionResult<AdminCommandResult> CreateUser([FromBody] CreateUserRequest request)
1616
{
17+
if(!HasPermission("users")) return Forbid();
18+
1719
var result = adminInstanceManager.CreateUser(request);
1820
CommonCore.instanceAdmin!.ForceUIUpdate = true;
1921
return Ok(new AdminCommandResult
@@ -26,6 +28,7 @@ public ActionResult<AdminCommandResult> CreateUser([FromBody] CreateUserRequest
2628
[HttpPost("update")]
2729
public ActionResult<AdminCommandResult> UpdateUser([FromBody] UpdateUserRequest request)
2830
{
31+
if(!HasPermission("users")) return Forbid();
2932
var result = adminInstanceManager.UpdateUser(request);
3033
CommonCore.instanceAdmin!.ForceUIUpdate = true;
3134
return Ok(new AdminCommandResult
@@ -38,6 +41,7 @@ public ActionResult<AdminCommandResult> UpdateUser([FromBody] UpdateUserRequest
3841
[HttpPost("delete")]
3942
public ActionResult<AdminCommandResult> DeleteUser([FromBody] DeleteUserRequest request)
4043
{
44+
if(!HasPermission("users")) return Forbid();
4145
var result = adminInstanceManager.DeleteUser(request.UserID);
4246
CommonCore.instanceAdmin!.ForceUIUpdate = true;
4347
return Ok(new AdminCommandResult
@@ -46,4 +50,11 @@ public ActionResult<AdminCommandResult> DeleteUser([FromBody] DeleteUserRequest
4650
Message = result.Message
4751
});
4852
}
53+
54+
private bool HasPermission(string permission)
55+
{
56+
var permissions = User.FindAll("permission").Select(c => c.Value).ToList();
57+
return permissions.Contains(permission);
58+
}
59+
4960
}

BHD-ServerManager/API/Controllers/BanController.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public class BanController : ControllerBase
1212
[HttpPost("save-blacklist")]
1313
public ActionResult<BanRecordSaveResult> SaveBlacklistRecord([FromBody] BanRecordSaveRequest req)
1414
{
15-
15+
if (!HasPermission("bans")) return Forbid();
16+
1617
IPAddress? ip = null;
1718
if (req.IsIP && !string.IsNullOrWhiteSpace(req.IPAddress))
1819
{
@@ -88,6 +89,8 @@ public ActionResult<BanRecordSaveResult> SaveBlacklistRecord([FromBody] BanRecor
8889
[HttpPost("delete-blacklist")]
8990
public ActionResult<CommandResult> DeleteBlacklistRecord([FromBody] DeleteBanRecordRequest req)
9091
{
92+
if (!HasPermission("bans")) return Forbid();
93+
9194
if (req == null || req.RecordID <= 0)
9295
return BadRequest(new CommandResult { Success = false, Message = "Invalid request." });
9396

@@ -107,7 +110,8 @@ public ActionResult<CommandResult> DeleteBlacklistRecord([FromBody] DeleteBanRec
107110
[HttpPost("save-whitelist")]
108111
public ActionResult<BanRecordSaveResult> SaveWhitelistRecord([FromBody] BanRecordSaveRequest req)
109112
{
110-
113+
if (!HasPermission("bans")) return Forbid();
114+
111115
IPAddress? ip = null;
112116
if (req.IsIP && !string.IsNullOrWhiteSpace(req.IPAddress))
113117
{
@@ -183,6 +187,8 @@ public ActionResult<BanRecordSaveResult> SaveWhitelistRecord([FromBody] BanRecor
183187
[HttpPost("delete-whitelist")]
184188
public ActionResult<CommandResult> DeleteWhitelistRecord([FromBody] DeleteBanRecordRequest req)
185189
{
190+
if (!HasPermission("bans")) return Forbid();
191+
186192
if (req == null || req.RecordID <= 0)
187193
return BadRequest(new CommandResult { Success = false, Message = "Invalid request." });
188194

@@ -199,4 +205,10 @@ public ActionResult<CommandResult> DeleteWhitelistRecord([FromBody] DeleteBanRec
199205
return Ok(new CommandResult { Success = true, Message = "Record deleted." });
200206
}
201207

208+
private bool HasPermission(string permission)
209+
{
210+
var permissions = User.FindAll("permission").Select(c => c.Value).ToList();
211+
return permissions.Contains(permission);
212+
}
213+
202214
}

BHD-ServerManager/API/Controllers/ChatController.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,31 @@ public ActionResult<CommandResult> SendMessage([FromBody] SendChatCommand comman
2222
[HttpPost("auto/add")]
2323
public ActionResult<CommandResult> AddAutoMessage([FromBody] AutoMessageRequest request)
2424
{
25+
if (!HasPermission("chat")) return Forbid();
2526
var result = chatInstanceManager.AddAutoMessage(request.Message!, request.Interval);
2627
return Ok(new CommandResult { Success = result.Success, Message = result.Message });
2728
}
2829

2930
[HttpPost("auto/remove")]
3031
public ActionResult<CommandResult> RemoveAutoMessage([FromBody] RemoveMessageRequest request)
3132
{
33+
if (!HasPermission("chat")) return Forbid();
3234
var result = chatInstanceManager.RemoveAutoMessage(int.Parse(request.Id!));
3335
return Ok(new CommandResult { Success = result.Success, Message = result.Message });
3436
}
3537

3638
[HttpPost("slap/add")]
3739
public ActionResult<CommandResult> AddSlapMessage([FromBody] SlapMessageRequest request)
3840
{
41+
if (!HasPermission("chat")) return Forbid();
3942
var result = chatInstanceManager.AddSlapMessage(request.Message!);
4043
return Ok(new CommandResult { Success = result.Success, Message = result.Message });
4144
}
4245

4346
[HttpPost("slap/remove")]
4447
public ActionResult<CommandResult> RemoveSlapMessage([FromBody] RemoveMessageRequest request)
4548
{
49+
if (!HasPermission("chat")) return Forbid();
4650
var result = chatInstanceManager.RemoveSlapMessage(int.Parse(request.Id!));
4751
return Ok(new CommandResult { Success = result.Success, Message = result.Message });
4852
}

BHD-ServerManager/API/Controllers/FileSystemController.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class FileSystemController : ControllerBase
1515
[HttpGet("drives")]
1616
public ActionResult<DirectoryListingResponse> GetDrives()
1717
{
18+
if(!HasPermission("profile")) return Forbid();
1819
try
1920
{
2021
var drives = DriveInfo.GetDrives()
@@ -47,6 +48,8 @@ public ActionResult<DirectoryListingResponse> GetDrives()
4748
[HttpPost("list")]
4849
public ActionResult<DirectoryListingResponse> GetDirectoryListing([FromBody] DirectoryListingRequest request)
4950
{
51+
if(!HasPermission("profile")) return Forbid();
52+
5053
try
5154
{
5255
// Default to drives if no path specified
@@ -166,6 +169,8 @@ public ActionResult<DirectoryListingResponse> GetDirectoryListing([FromBody] Dir
166169
[HttpPost("validate-path")]
167170
public ActionResult<CommandResult> ValidatePath([FromBody] DirectoryListingRequest request)
168171
{
172+
if(!HasPermission("profile")) return Forbid();
173+
169174
try
170175
{
171176
if (string.IsNullOrWhiteSpace(request.Path))
@@ -193,5 +198,11 @@ public ActionResult<CommandResult> ValidatePath([FromBody] DirectoryListingReque
193198
Message = $"Error validating path: {ex.Message}"
194199
});
195200
}
201+
202+
}
203+
private bool HasPermission(string permission)
204+
{
205+
var permissions = User.FindAll("permission").Select(c => c.Value).ToList();
206+
return permissions.Contains(permission);
196207
}
197208
}

BHD-ServerManager/API/Controllers/GamePlayController.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public class GamePlayController : ControllerBase
1919
[HttpGet("settings")]
2020
public ActionResult<GamePlaySettingsResponse> GetSettings()
2121
{
22+
if(!HasPermission("gameplay")) return Forbid();
23+
2224
var result = theInstanceManager.LoadGamePlaySettings();
2325

2426
if (!result.Success)
@@ -47,6 +49,8 @@ public ActionResult<GamePlaySettingsResponse> GetSettings()
4749
[HttpPost("settings")]
4850
public ActionResult<CommandResult> SaveSettings([FromBody] GamePlaySettingsRequest request)
4951
{
52+
if(!HasPermission("gameplay")) return Forbid();
53+
5054
// Convert DTO to GamePlaySettings
5155
var options = new ServerOptions(
5256
request.Options.AutoBalance, request.Options.ShowTracers,
@@ -112,6 +116,8 @@ public ActionResult<CommandResult> SaveSettings([FromBody] GamePlaySettingsReque
112116
[HttpPost("validate")]
113117
public ActionResult<ValidationResult> ValidateSettings([FromBody] GamePlaySettingsRequest request)
114118
{
119+
if(!HasPermission("gameplay")) return Forbid();
120+
115121
// For gameplay, basic validation can be done here
116122
var errors = new List<string>();
117123

@@ -232,6 +238,8 @@ private void TriggerServerUIReload()
232238
[HttpPost("update-server")]
233239
public ActionResult<CommandResult> UpdateGameServer()
234240
{
241+
if(!HasPermission("gameplay")) return Forbid();
242+
235243
try
236244
{
237245
// Check if server is running
@@ -269,6 +277,8 @@ public ActionResult<CommandResult> UpdateGameServer()
269277
[HttpPost("lock-lobby")]
270278
public ActionResult<CommandResult> LockLobby()
271279
{
280+
if(!HasPermission("gameplay")) return Forbid();
281+
272282
try
273283
{
274284
// Check if server is running
@@ -306,6 +316,8 @@ public ActionResult<CommandResult> LockLobby()
306316
[HttpGet("export")]
307317
public ActionResult<GamePlaySettingsExportResponse> ExportSettings()
308318
{
319+
if(!HasPermission("gameplay")) return Forbid();
320+
309321
try
310322
{
311323
var result = theInstanceManager.LoadGamePlaySettings();
@@ -394,6 +406,8 @@ public ActionResult<GamePlaySettingsExportResponse> ExportSettings()
394406
[HttpPost("import")]
395407
public ActionResult<CommandResult> ImportSettings([FromBody] GamePlaySettingsImportRequest request)
396408
{
409+
if(!HasPermission("gameplay")) return Forbid();
410+
397411
try
398412
{
399413
// Deserialize JSON
@@ -449,6 +463,8 @@ public ActionResult<CommandResult> ImportSettings([FromBody] GamePlaySettingsImp
449463
[HttpPost("start-server")]
450464
public ActionResult<CommandResult> StartServer()
451465
{
466+
if(!HasPermission("gameplay")) return Forbid();
467+
452468
try
453469
{
454470
var instance = CommonCore.theInstance;
@@ -523,6 +539,8 @@ public ActionResult<CommandResult> StartServer()
523539
[HttpPost("stop-server")]
524540
public ActionResult<CommandResult> StopServer()
525541
{
542+
if(!HasPermission("gameplay")) return Forbid();
543+
526544
try
527545
{
528546
var instance = CommonCore.theInstance;
@@ -565,5 +583,9 @@ public ActionResult<CommandResult> StopServer()
565583
});
566584
}
567585
}
568-
586+
private bool HasPermission(string permission)
587+
{
588+
var permissions = User.FindAll("permission").Select(c => c.Value).ToList();
589+
return permissions.Contains(permission);
590+
}
569591
}

BHD-ServerManager/API/Controllers/MapPlaylistController.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using HawkSyncShared.DTOs;
55
using BHD_ServerManager.Classes.InstanceManagers;
66
using HawkSyncShared.Instances;
7+
using HawkSyncShared.SupportClasses;
78

89
namespace BHD_ServerManager.API.Controllers;
910

@@ -15,6 +16,8 @@ public class MapPlaylistController : ControllerBase
1516
[HttpGet("available-maps")]
1617
public ActionResult<List<MapDTO>> GetAvailableMaps()
1718
{
19+
if(!HasPermission("maps")) return Forbid();
20+
1821
var result = mapInstanceManager.LoadAvailableMaps();
1922
var allMaps = result.DefaultMaps.Concat(result.CustomMaps)
2023
.Select(m => new MapDTO
@@ -31,6 +34,8 @@ public ActionResult<List<MapDTO>> GetAvailableMaps()
3134
[HttpGet("playlists")]
3235
public ActionResult<AllPlaylistsDTO> GetAllPlaylists()
3336
{
37+
if(!HasPermission("maps")) return Forbid();
38+
3439
var instance = CommonCore.instanceMaps!;
3540
var dto = new AllPlaylistsDTO
3641
{
@@ -54,6 +59,8 @@ public ActionResult<AllPlaylistsDTO> GetAllPlaylists()
5459
[HttpGet("playlist/{id}")]
5560
public ActionResult<PlaylistDTO> GetPlaylist(int id)
5661
{
62+
if(!HasPermission("maps")) return Forbid();
63+
5764
var (success, maps, error) = mapInstanceManager.GetPlaylistMaps(id);
5865
if (!success)
5966
return BadRequest(new PlaylistCommandResult { Success = false, Message = error });
@@ -75,6 +82,8 @@ public ActionResult<PlaylistDTO> GetPlaylist(int id)
7582
[HttpPost("playlist/save")]
7683
public ActionResult<PlaylistCommandResult> SavePlaylist([FromBody] PlaylistDTO playlist)
7784
{
85+
if(!HasPermission("maps")) return Forbid();
86+
7887
var maps = playlist.Maps.Select(m => new HawkSyncShared.ObjectClasses.mapFileInfo
7988
{
8089
MapID = m.MapID,
@@ -100,6 +109,8 @@ public ActionResult<PlaylistCommandResult> SavePlaylist([FromBody] PlaylistDTO p
100109
[HttpPost("playlist/set-active")]
101110
public ActionResult<PlaylistCommandResult> SetActivePlaylist([FromBody] PlaylistDTO playlist)
102111
{
112+
if(!HasPermission("maps")) return Forbid();
113+
103114
var saveResult = mapInstanceManager.SavePlaylist(playlist.PlaylistID, playlist.Maps.Select(m => new HawkSyncShared.ObjectClasses.mapFileInfo
104115
{
105116
MapID = m.MapID,
@@ -124,6 +135,8 @@ public ActionResult<PlaylistCommandResult> SetActivePlaylist([FromBody] Playlist
124135
[HttpPost("playlist/import")]
125136
public ActionResult<PlaylistCommandResult> ImportPlaylist([FromBody] PlaylistDTO playlist)
126137
{
138+
if(!HasPermission("maps")) return Forbid();
139+
127140
// Overwrite playlist with imported maps
128141
var result = mapInstanceManager.SavePlaylist(playlist.PlaylistID, playlist.Maps.Select(m => new HawkSyncShared.ObjectClasses.mapFileInfo
129142
{
@@ -147,6 +160,8 @@ public ActionResult<PlaylistCommandResult> ImportPlaylist([FromBody] PlaylistDTO
147160
[HttpGet("playlist/export/{id}")]
148161
public ActionResult<PlaylistDTO> ExportPlaylist(int id)
149162
{
163+
if(!HasPermission("maps")) return Forbid();
164+
150165
var (success, maps, error) = mapInstanceManager.GetPlaylistMaps(id);
151166
if (!success)
152167
return BadRequest(new PlaylistCommandResult { Success = false, Message = error });
@@ -169,27 +184,35 @@ public ActionResult<PlaylistDTO> ExportPlaylist(int id)
169184
[HttpPost("server/skip-map")]
170185
public ActionResult<PlaylistCommandResult> SkipMap()
171186
{
187+
if(!HasPermission("maps")) return Forbid();
188+
172189
var result = mapInstanceManager.SkipMap();
173190
return Ok(new PlaylistCommandResult { Success = result.Success, Message = result.Message });
174191
}
175192

176193
[HttpPost("server/score-map")]
177194
public ActionResult<PlaylistCommandResult> ScoreMap()
178195
{
196+
if(!HasPermission("maps")) return Forbid();
197+
179198
var result = mapInstanceManager.ScoreMap();
180199
return Ok(new PlaylistCommandResult { Success = result.Success, Message = result.Message });
181200
}
182201

183202
[HttpPost("server/play-next")]
184203
public ActionResult<PlaylistCommandResult> PlayNext([FromBody] int mapIndex)
185204
{
205+
if(!HasPermission("maps")) return Forbid();
206+
186207
var result = mapInstanceManager.SetNextMap(mapIndex);
187208
return Ok(new PlaylistCommandResult { Success = result.Success, Message = result.Message });
188209
}
189210

190211
[HttpPost("refresh-available-maps")]
191212
public ActionResult<List<MapDTO>> RefreshAvailableMaps()
192213
{
214+
if(!HasPermission("maps")) return Forbid();
215+
193216
var result = mapInstanceManager.LoadAvailableMaps();
194217
var allMaps = result.DefaultMaps.Concat(result.CustomMaps)
195218
.Select(m => new MapDTO
@@ -216,4 +239,13 @@ private void TriggerServerUIReload()
216239
}
217240
}
218241

242+
private bool HasPermission(string permission)
243+
{
244+
var permissions = User.FindAll("permission").Select(c => c.Value).ToList();
245+
AppDebug.Log("MapPlaylistController", $"Checking user permissions, {permission} from user { User.Identity!.Name}");
246+
AppDebug.Log("MapPlaylistController", $"User permissions: {string.Join(", ", permissions)}");
247+
AppDebug.Log("MapPlaylistController", $"Has Permission: {permissions.Contains(permission).ToString()}");
248+
return permissions.Contains(permission);
249+
}
250+
219251
}

0 commit comments

Comments
 (0)