Skip to content

Commit 74084ad

Browse files
author
agile.zhou
committed
control backend permission
1 parent a203a89 commit 74084ad

File tree

27 files changed

+220
-358
lines changed

27 files changed

+220
-358
lines changed

src/AgileConfig.Server.Apisite/Controllers/AppController.cs

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using AgileConfig.Server.Apisite.Models;
77
using AgileConfig.Server.Apisite.Models.Mapping;
88
using AgileConfig.Server.Apisite.Utilites;
9+
using AgileConfig.Server.Common;
910
using AgileConfig.Server.Common.EventBus;
1011
using AgileConfig.Server.Common.Resources;
1112
using AgileConfig.Server.Data.Entity;
@@ -21,42 +22,51 @@ namespace AgileConfig.Server.Apisite.Controllers;
2122
public class AppController : Controller
2223
{
2324
private readonly IAppService _appService;
24-
private readonly IPermissionService _permissionService;
2525
private readonly ITinyEventBus _tinyEventBus;
2626
private readonly IUserService _userService;
2727

2828
public AppController(IAppService appService,
29-
IPermissionService permissionService,
3029
IUserService userService,
3130
ITinyEventBus tinyEventBus)
3231
{
3332
_userService = userService;
3433
_tinyEventBus = tinyEventBus;
3534
_appService = appService;
36-
_permissionService = permissionService;
3735
}
3836

37+
[TypeFilter(typeof(PermissionCheckAttribute),
38+
Arguments = new object[] { Functions.App_Read })]
3939
public async Task<IActionResult> Search(string name, string id, string group, string sortField,
4040
string ascOrDesc, bool tableGrouped, int current = 1, int pageSize = 20)
4141
{
4242
if (current < 1) throw new ArgumentException(Messages.CurrentCannotBeLessThanOne);
4343

4444
if (pageSize < 1) throw new ArgumentException(Messages.PageSizeCannotBeLessThanOne);
4545

46+
var currentUserId = await this.GetCurrentUserId(_userService);
47+
var isAdmin = false;
48+
if (!string.IsNullOrWhiteSpace(currentUserId))
49+
{
50+
var roles = await _userService.GetUserRolesAsync(currentUserId);
51+
isAdmin = roles.Any(r => r.Id == SystemRoleConstants.AdminId || r.Id == SystemRoleConstants.SuperAdminId);
52+
}
53+
4654
var appListVms = new List<AppListVM>();
4755
long count = 0;
4856
if (!tableGrouped)
4957
{
5058
var searchResult =
51-
await _appService.SearchAsync(id, name, group, sortField, ascOrDesc, current, pageSize);
59+
await _appService.SearchAsync(id, name, group, sortField, ascOrDesc, current, pageSize, currentUserId,
60+
isAdmin);
5261
foreach (var app in searchResult.Apps) appListVms.Add(app.ToAppListVM());
5362

5463
count = searchResult.Count;
5564
}
5665
else
5766
{
5867
var searchResult =
59-
await _appService.SearchGroupedAsync(id, name, group, sortField, ascOrDesc, current, pageSize);
68+
await _appService.SearchGroupedAsync(id, name, group, sortField, ascOrDesc, current, pageSize,
69+
currentUserId, isAdmin);
6070
foreach (var groupedApp in searchResult.GroupedApps)
6171
{
6272
var app = groupedApp.App;
@@ -97,7 +107,7 @@ private async Task AppendInheritancedInfo(List<AppListVM> list)
97107
}
98108
}
99109

100-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "App.Add", Functions.App_Add })]
110+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Add })]
101111
[HttpPost]
102112
public async Task<IActionResult> Add([FromBody] AppVM model)
103113
{
@@ -141,7 +151,7 @@ public async Task<IActionResult> Add([FromBody] AppVM model)
141151
});
142152
}
143153

144-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "App.Edit", Functions.App_Edit })]
154+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Edit })]
145155
[HttpPost]
146156
public async Task<IActionResult> Edit([FromBody] AppVM model)
147157
{
@@ -188,6 +198,7 @@ public async Task<IActionResult> Edit([FromBody] AppVM model)
188198
});
189199
}
190200

201+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Read })]
191202
[HttpGet]
192203
public async Task<IActionResult> Get(string id)
193204
{
@@ -213,7 +224,7 @@ public async Task<IActionResult> Get(string id)
213224
}
214225

215226
[TypeFilter(typeof(PermissionCheckAttribute),
216-
Arguments = new object[] { "App.DisableOrEnable", Functions.App_Edit })]
227+
Arguments = new object[] { Functions.App_Edit })]
217228
[HttpPost]
218229
public async Task<IActionResult> DisableOrEnable(string id)
219230
{
@@ -237,7 +248,7 @@ public async Task<IActionResult> DisableOrEnable(string id)
237248
});
238249
}
239250

240-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "App.Delete", Functions.App_Delete })]
251+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Delete })]
241252
[HttpPost]
242253
public async Task<IActionResult> Delete(string id)
243254
{
@@ -267,6 +278,7 @@ public async Task<IActionResult> Delete(string id)
267278
/// </summary>
268279
/// <returns></returns>
269280
[HttpGet]
281+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Read })]
270282
public async Task<IActionResult> InheritancedApps(string currentAppId)
271283
{
272284
var apps = await _appService.GetAllInheritancedAppsAsync();
@@ -296,24 +308,22 @@ public async Task<IActionResult> InheritancedApps(string currentAppId)
296308
/// </summary>
297309
/// <param name="model">View model containing authorization assignments.</param>
298310
/// <returns>Operation result.</returns>
299-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "App.Auth", Functions.App_Auth })]
311+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Auth })]
300312
[HttpPost]
301313
public async Task<IActionResult> SaveAppAuth([FromBody] AppAuthVM model)
302314
{
303315
ArgumentNullException.ThrowIfNull(model);
304316

305-
var result = await _appService.SaveUserAppAuth(model.AppId, model.EditConfigPermissionUsers,
306-
_permissionService.EditConfigPermissionKey);
307-
var result1 = await _appService.SaveUserAppAuth(model.AppId, model.PublishConfigPermissionUsers,
308-
_permissionService.PublishConfigPermissionKey);
317+
var result = await _appService.SaveUserAppAuth(model.AppId, model.AuthorizedUsers);
309318

310319
return Json(new
311320
{
312-
success = result && result1
321+
success = result
313322
});
314323
}
315324

316325
[HttpGet]
326+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Read })]
317327
public async Task<IActionResult> GetUserAppAuth(string appId)
318328
{
319329
ArgumentException.ThrowIfNullOrEmpty(appId);
@@ -322,12 +332,8 @@ public async Task<IActionResult> GetUserAppAuth(string appId)
322332
{
323333
AppId = appId
324334
};
325-
result.EditConfigPermissionUsers =
326-
(await _appService.GetUserAppAuth(appId, _permissionService.EditConfigPermissionKey)).Select(x => x.Id)
327-
.ToList();
328-
result.PublishConfigPermissionUsers =
329-
(await _appService.GetUserAppAuth(appId, _permissionService.PublishConfigPermissionKey))
330-
.Select(x => x.Id).ToList();
335+
result.AuthorizedUsers =
336+
(await _appService.GetUserAppAuth(appId)).Select(x => x.Id).ToList();
331337

332338
return Json(new
333339
{
@@ -337,6 +343,7 @@ public async Task<IActionResult> GetUserAppAuth(string appId)
337343
}
338344

339345
[HttpGet]
346+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.App_Read })]
340347
public async Task<IActionResult> GetAppGroups()
341348
{
342349
var groups = await _appService.GetAppGroups();

src/AgileConfig.Server.Apisite/Controllers/ConfigController.cs

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ ITinyEventBus tinyEventBus
3939
_tinyEventBus = tinyEventBus;
4040
}
4141

42-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "Config.Add", Functions.Config_Add })]
42+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.Config_Add })]
4343
[HttpPost]
4444
public async Task<IActionResult> Add([FromBody] ConfigVM model, EnvString env)
4545
{
@@ -88,7 +88,7 @@ public async Task<IActionResult> Add([FromBody] ConfigVM model, EnvString env)
8888
}
8989

9090
[TypeFilter(typeof(PermissionCheckAttribute),
91-
Arguments = new object[] { "Config.AddRange", Functions.Config_Add })]
91+
Arguments = new object[] { Functions.Config_Add })]
9292
[HttpPost]
9393
public async Task<IActionResult> AddRange([FromBody] List<ConfigVM> model, EnvString env)
9494
{
@@ -146,7 +146,7 @@ public async Task<IActionResult> AddRange([FromBody] List<ConfigVM> model, EnvSt
146146
}
147147

148148
[TypeFilter(typeof(PermissionCheckAttribute),
149-
Arguments = new object[] { "Config.Edit", Functions.Config_Edit })]
149+
Arguments = new object[] { Functions.Config_Edit })]
150150
[HttpPost]
151151
public async Task<IActionResult> Edit([FromBody] ConfigVM model, [FromQuery] EnvString env)
152152
{
@@ -254,6 +254,8 @@ public async Task<IActionResult> All(string env)
254254
/// <param name="current">Current page number.</param>
255255
/// <returns></returns>
256256
[HttpGet]
257+
[TypeFilter(typeof(PermissionCheckAttribute),
258+
Arguments = new object[] { Functions.Config_Read })]
257259
public async Task<IActionResult> Search(string appId, string group, string key, OnlineStatus? onlineStatus,
258260
string sortField, string ascOrDesc, EnvString env, int pageSize = 20, int current = 1)
259261
{
@@ -295,6 +297,8 @@ public async Task<IActionResult> Search(string appId, string group, string key,
295297
}
296298

297299
[HttpGet]
300+
[TypeFilter(typeof(PermissionCheckAttribute),
301+
Arguments = new object[] { Functions.Config_Read })]
298302
public async Task<IActionResult> Get(string id, EnvString env)
299303
{
300304
if (string.IsNullOrEmpty(id)) throw new ArgumentNullException("id");
@@ -310,7 +314,7 @@ public async Task<IActionResult> Get(string id, EnvString env)
310314
}
311315

312316
[TypeFilter(typeof(PermissionCheckAttribute),
313-
Arguments = new object[] { "Config.Delete", Functions.Config_Delete })]
317+
Arguments = new object[] { Functions.Config_Delete })]
314318
[HttpPost]
315319
public async Task<IActionResult> Delete(string id, EnvString env)
316320
{
@@ -343,7 +347,7 @@ public async Task<IActionResult> Delete(string id, EnvString env)
343347
}
344348

345349
[TypeFilter(typeof(PermissionCheckAttribute),
346-
Arguments = new object[] { "Config.DeleteSome", Functions.Config_Delete })]
350+
Arguments = new object[] { Functions.Config_Delete })]
347351
[HttpPost]
348352
public async Task<IActionResult> DeleteSome([FromBody] List<string> ids, EnvString env)
349353
{
@@ -385,7 +389,7 @@ public async Task<IActionResult> DeleteSome([FromBody] List<string> ids, EnvStri
385389

386390

387391
[TypeFilter(typeof(PermissionCheckAttribute),
388-
Arguments = new object[] { "Config.Rollback", Functions.Config_Publish })]
392+
Arguments = new object[] { Functions.Config_Offline })]
389393
[HttpPost]
390394
public async Task<IActionResult> Rollback(string publishTimelineId, EnvString env)
391395
{
@@ -406,6 +410,8 @@ public async Task<IActionResult> Rollback(string publishTimelineId, EnvString en
406410
});
407411
}
408412

413+
[TypeFilter(typeof(PermissionCheckAttribute),
414+
Arguments = new object[] { Functions.Config_Read })]
409415
[HttpGet]
410416
public async Task<IActionResult> ConfigPublishedHistory(string configId, EnvString env)
411417
{
@@ -438,7 +444,7 @@ public async Task<IActionResult> ConfigPublishedHistory(string configId, EnvStri
438444
/// </summary>
439445
/// <returns></returns>
440446
[TypeFilter(typeof(PermissionCheckAttribute),
441-
Arguments = new object[] { "Config.Publish", Functions.Config_Publish })]
447+
Arguments = new object[] { Functions.Config_Publish })]
442448
[HttpPost]
443449
public async Task<IActionResult> Publish([FromBody] PublishLogVM model, EnvString env)
444450
{
@@ -517,6 +523,8 @@ public IActionResult PreViewJsonFile()
517523
/// </summary>
518524
/// <param name="appId">Application ID.</param>
519525
/// <returns></returns>
526+
[TypeFilter(typeof(PermissionCheckAttribute),
527+
Arguments = new object[] { Functions.Config_Read })]
520528
public async Task<IActionResult> ExportJson(string appId, EnvString env)
521529
{
522530
if (string.IsNullOrEmpty(appId)) throw new ArgumentNullException("appId");
@@ -540,6 +548,8 @@ public async Task<IActionResult> ExportJson(string appId, EnvString env)
540548
/// </summary>
541549
/// <param name="appId">Application ID.</param>
542550
/// <returns></returns>
551+
[TypeFilter(typeof(PermissionCheckAttribute),
552+
Arguments = new object[] { Functions.Config_Read })]
543553
public async Task<IActionResult> WaitPublishStatus(string appId, EnvString env)
544554
{
545555
if (string.IsNullOrEmpty(appId)) throw new ArgumentNullException("appId");
@@ -569,6 +579,8 @@ public async Task<IActionResult> WaitPublishStatus(string appId, EnvString env)
569579
/// </summary>
570580
/// <param name="appId">Application ID.</param>
571581
/// <returns></returns>
582+
[TypeFilter(typeof(PermissionCheckAttribute),
583+
Arguments = new object[] { Functions.Config_Read })]
572584
public async Task<IActionResult> PublishHistory(string appId, EnvString env)
573585
{
574586
if (string.IsNullOrEmpty(appId)) throw new ArgumentNullException("appId");
@@ -596,6 +608,8 @@ await _configService.GetPublishTimeLineNodeAsync(data.FirstOrDefault()?.PublishT
596608
});
597609
}
598610

611+
[TypeFilter(typeof(PermissionCheckAttribute),
612+
Arguments = new object[] { Functions.Config_Edit })]
599613
public async Task<IActionResult> CancelEdit(string configId, EnvString env)
600614
{
601615
if (string.IsNullOrEmpty(configId)) throw new ArgumentNullException("configId");
@@ -614,6 +628,8 @@ public async Task<IActionResult> CancelEdit(string configId, EnvString env)
614628
});
615629
}
616630

631+
[TypeFilter(typeof(PermissionCheckAttribute),
632+
Arguments = new object[] { Functions.Config_Edit })]
617633
public async Task<IActionResult> CancelSomeEdit([FromBody] List<string> ids, EnvString env)
618634
{
619635
if (ids == null) throw new ArgumentNullException("ids");
@@ -633,7 +649,7 @@ public async Task<IActionResult> CancelSomeEdit([FromBody] List<string> ids, Env
633649
}
634650

635651
[TypeFilter(typeof(PermissionCheckAttribute),
636-
Arguments = new object[] { "Config.EvnSync", Functions.Config_Add })]
652+
Arguments = new object[] { Functions.Config_Add })]
637653
[HttpPost]
638654
public async Task<IActionResult> SyncEnv([FromBody] List<string> toEnvs, [FromQuery] string appId,
639655
[FromQuery] string currentEnv)
@@ -660,6 +676,8 @@ public async Task<IActionResult> SyncEnv([FromBody] List<string> toEnvs, [FromQu
660676
});
661677
}
662678

679+
[TypeFilter(typeof(PermissionCheckAttribute),
680+
Arguments = new object[] { Functions.Config_Read })]
663681
public async Task<IActionResult> GetKvList(string appId, EnvString env)
664682
{
665683
if (string.IsNullOrEmpty(appId)) throw new ArgumentNullException("appId");
@@ -684,6 +702,8 @@ public async Task<IActionResult> GetKvList(string appId, EnvString env)
684702
/// </summary>
685703
/// <param name="appId">Application ID.</param>
686704
/// <returns></returns>
705+
[TypeFilter(typeof(PermissionCheckAttribute),
706+
Arguments = new object[] { Functions.Config_Read })]
687707
public async Task<IActionResult> GetJson(string appId, EnvString env)
688708
{
689709
if (string.IsNullOrEmpty(appId)) throw new ArgumentNullException("appId");
@@ -708,6 +728,8 @@ public async Task<IActionResult> GetJson(string appId, EnvString env)
708728
}
709729

710730
[HttpPost]
731+
[TypeFilter(typeof(PermissionCheckAttribute),
732+
Arguments = new object[] { Functions.Config_Edit })]
711733
public async Task<IActionResult> SaveJson([FromBody] SaveJsonVM data, string appId, EnvString env)
712734
{
713735
if (string.IsNullOrEmpty(appId)) throw new ArgumentNullException(nameof(appId));
@@ -725,6 +747,8 @@ public async Task<IActionResult> SaveJson([FromBody] SaveJsonVM data, string app
725747
}
726748

727749
[HttpPost]
750+
[TypeFilter(typeof(PermissionCheckAttribute),
751+
Arguments = new object[] { Functions.Config_Edit })]
728752
public async Task<IActionResult> SaveKvList([FromBody] SaveKVListVM data, string appId, EnvString env)
729753
{
730754
if (string.IsNullOrEmpty(appId)) throw new ArgumentNullException(nameof(appId));

src/AgileConfig.Server.Apisite/Controllers/RoleController.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public IActionResult SupportedPermissions()
5656
});
5757
}
5858

59-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "Role.Add", Functions.Role_Add })]
59+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.Role_Add })]
6060
[HttpPost]
6161
public async Task<IActionResult> Add([FromBody] RoleVM model)
6262
{
@@ -75,7 +75,7 @@ public async Task<IActionResult> Add([FromBody] RoleVM model)
7575
return Json(new { success = true });
7676
}
7777

78-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "Role.Edit", Functions.Role_Edit })]
78+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.Role_Edit })]
7979
[HttpPost]
8080
public async Task<IActionResult> Edit([FromBody] RoleVM model)
8181
{
@@ -106,7 +106,7 @@ public async Task<IActionResult> Edit([FromBody] RoleVM model)
106106
});
107107
}
108108

109-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "Role.Delete", Functions.Role_Delete })]
109+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.Role_Delete })]
110110
[HttpPost]
111111
public async Task<IActionResult> Delete(string id)
112112
{

src/AgileConfig.Server.Apisite/Controllers/ServerNodeController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ITinyEventBus tinyEventBus
3535
_tinyEventBus = tinyEventBus;
3636
}
3737

38-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "Node.Add", Functions.Node_Add })]
38+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.Node_Add })]
3939
[HttpPost]
4040
public async Task<IActionResult> Add([FromBody] ServerNodeVM model)
4141
{
@@ -70,7 +70,7 @@ public async Task<IActionResult> Add([FromBody] ServerNodeVM model)
7070
});
7171
}
7272

73-
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { "Node.Delete", Functions.Node_Delete })]
73+
[TypeFilter(typeof(PermissionCheckAttribute), Arguments = new object[] { Functions.Node_Delete })]
7474
[HttpPost]
7575
public async Task<IActionResult> Delete([FromBody] ServerNodeVM model)
7676
{

0 commit comments

Comments
 (0)