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.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 == DataPermissionAssignmentEnumType.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); } }