From 6f47b936423076e24164ae1b93db4fca9f7eeb7e Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 8 Jan 2025 18:48:06 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetDataPermissionService.cs | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs diff --git a/Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs b/Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs new file mode 100644 index 00000000..afb4ab6d --- /dev/null +++ b/Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs @@ -0,0 +1,107 @@ +using Dlhis.DataPermission.Model; +using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Device.Entities; +using Dlhis.Entity.Sys.Entities; +using Dlhis.Entity.Sys.Enums; +using Kurisu.AspNetCore.Authentication.Abstractions; +using Kurisu.AspNetCore.DataAccess.Entity; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Attributes; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; + +namespace Dlhis.ScheduledTask.DataPermissions; + +public class GetDataPermissionService : IGetDataPermissions, ISingletonDependency +{ + private readonly ICurrentUser _currentUser; + private readonly IServiceProvider _serviceProvider; + + public GetDataPermissionService(ICurrentUser currentUser, IServiceProvider serviceProvider) + { + _currentUser = currentUser; + _serviceProvider = serviceProvider; + } + + + public Dictionary> GetData() + { + var dict = new Dictionary>(2); + var currentRole = _currentUser.GetRole(); + if (currentRole is "admin" or "tenant-admin") + { + return dict; + } + + using var scope = _serviceProvider.CreateScope(); + + var db = scope.ServiceProvider.GetService(); + db.Ignore(() => + { + var userDataPermissions = db.Queryable() + .Where(x => x.AssignType == AssignTypeEnumType.User) + .Where(x => x.AssignValue == _currentUser.GetStringSubjectId()) + .ToList(); + + var deviceCodeProperty = typeof(T) + .GetProperties() + .FirstOrDefault(x => x.IsDefined(typeof(DeviceCodeAttribute), false)); + + var deviceCodes = new List(); + + if (deviceCodeProperty != null) + { + var currentDeviceCodes = userDataPermissions.Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Device).Select(x => x.UniqueValue).ToList(); + deviceCodes.AddRange(currentDeviceCodes); + dict.Add(deviceCodeProperty.Name, deviceCodes.Distinct().ToList()); + } + }); + + return dict; + } +} + +public interface IDataPermissionService : IScopeDependency +{ + (bool, List) GetMyDeviceCodes(); + (bool, List) GetMyDeviceGroupCodes(); +} + +public class MyDataPermissionService : IDataPermissionService +{ + private readonly IGetDataPermissions _getDataPermissions; + private readonly ICurrentUser _currentUser; + + public MyDataPermissionService(IGetDataPermissions getDataPermissions, ICurrentUser currentUser) + { + _getDataPermissions = getDataPermissions; + _currentUser = currentUser; + } + + /// + public (bool, List) GetMyDeviceCodes() + { + var codes = new List(); + + var hasAllPermission = _currentUser.GetRole() is "admin" or "tenant-admin"; + + if (!hasAllPermission) + { + codes = _getDataPermissions.GetData().FirstOrDefault().Value ?? new List(); + } + + return (!hasAllPermission, codes); + } + + /// + public (bool, List) GetMyDeviceGroupCodes() + { + var codes = new List(); + + var hasAllPermission = _currentUser.GetRole() is "admin" or "tenant-admin"; + if (!hasAllPermission) + { + codes = _getDataPermissions.GetData().FirstOrDefault().Value ?? new List(); + } + + return (!hasAllPermission, codes); + } +} \ No newline at end of file