Forráskód Böngészése

Merge branch 'master' of http://git.fwt.com/Hotline/hotline

xf 2 éve
szülő
commit
33aacf49a7

+ 1 - 1
src/Hotline.Api/Controllers/HomeController.cs

@@ -65,7 +65,7 @@ public class HomeController : BaseController
     {
         var db = _uow.Db;
         db.DbMaintenance.CreateDatabase();
-        db.CodeFirst.InitTables<UserFastMenu>();
+        db.CodeFirst.InitTables<SystemDataTable>();
         return Task.CompletedTask;
     }
 

+ 7 - 0
src/Hotline.Api/Controllers/RoleController.cs

@@ -79,6 +79,7 @@ public class RoleController : BaseController
     {
         var delRoleRsp = await _identityClient.DeleteRoleAsync(roleId, HttpContext.RequestAborted);
         CheckHttpRequestSuccess(delRoleRsp, "DeleteRoleAsync");
+        await _systemAuthorityRepository.RemoveAsync(roleId);
     }
 
     /// <summary>
@@ -92,6 +93,12 @@ public class RoleController : BaseController
     {
         var updateRoleRsp = await _identityClient.UpdateRoleAsync(dto, HttpContext.RequestAborted);
         CheckHttpRequestSuccess(updateRoleRsp, "UpdateRoleAsync");
+        var entity = await _systemAuthorityRepository.GetAsync(x => x.RoleId == dto.Id);
+        if (entity!=null)
+        {
+            entity.RoleCode = dto.Name;
+            await _systemAuthorityRepository.UpdateAsync(entity, HttpContext.RequestAborted);
+        }
     }
 
     #region 应用权限管理

+ 10 - 4
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionFilterBuilder.cs

@@ -1,4 +1,5 @@
-using System.Linq.Expressions;
+using Hotline.Share.Enums;
+using System.Linq.Expressions;
 using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 using XF.Domain.Entities;
@@ -22,12 +23,17 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
         var scheme = _dataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
         switch (scheme.QueryFilter)
         {
-            case EQueryFilter.CreatorOnly:
+            case EAuthorityType.Create:
                 return d => d.CreateUserId == userId;
-            case EQueryFilter.SelfAndSubDepartment:
+            case EAuthorityType.Org:
+                return d => d.OrgCode.StartsWith(scheme.OrgCode);
+            case EAuthorityType.OrgAndBelow:
                 return d => d.OrgCode == scheme.OrgCode;//todo
+            case EAuthorityType.All:
+                return d => true;
             default:
-                throw new ArgumentOutOfRangeException();
+                return d => false;
+                //throw new ArgumentOutOfRangeException();
         }
     }
 }

+ 40 - 9
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionManager.cs

@@ -1,4 +1,7 @@
-using XF.Domain.Authentications;
+using Hotline.Settings;
+using Hotline.Share.Enums;
+using Org.BouncyCastle.Asn1.X509;
+using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 using XF.Domain.Entities;
 
@@ -6,29 +9,57 @@ namespace Hotline.Repository.SqlSugar.DataPermissions;
 
 public class DataPermissionManager : IDataPermissionManager, IScopeDependency
 {
+    private readonly ISystemDataTableRepository _systemDataTableRepository;
+    private readonly ISystemDataAuthorityRepository _systemDataAuthorityRepository;
+
+    public DataPermissionManager(ISystemDataTableRepository systemDataTableRepository,ISystemDataAuthorityRepository systemDataAuthorityRepository)
+    {
+        _systemDataTableRepository = systemDataTableRepository;
+        _systemDataAuthorityRepository = systemDataAuthorityRepository;
+    }
+
     public DataPermissionScheme GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new()
     {
-        EQueryFilter? queryFilter = GetCurrentQueryFilter(sessionContext.Roles, typeof(TEntity).Name);
+        EAuthorityType? queryFilter = GetCurrentQueryFilter(sessionContext.Roles, typeof(TEntity).Name);
         if (queryFilter == null)
         {
+            
             //todo 未配置数据查询权限处理方案
+            //TODO 不处理
         }
 
-        if (queryFilter == EQueryFilter.CreatorOnly)
-            return new DataPermissionScheme(EQueryFilter.CreatorOnly);
+        //全部
+        if (queryFilter == EAuthorityType.All)
+            return new DataPermissionScheme(EAuthorityType.All);
+
+        //本部
+        if (queryFilter == EAuthorityType.Org)
+            return new DataPermissionScheme(EAuthorityType.Org);
 
-        if (queryFilter == EQueryFilter.SelfAndSubDepartment)
+        //本部及本部以下
+        if (queryFilter == EAuthorityType.OrgAndBelow)
         {
             //todo 查询对应部门编码
-
-            return new DataPermissionScheme(EQueryFilter.SelfAndSubDepartment, "");
+            return new DataPermissionScheme(EAuthorityType.OrgAndBelow, "");
         }
 
+        //创建人
+        if (queryFilter == EAuthorityType.Create)
+            return new DataPermissionScheme(EAuthorityType.Create);
+
         throw new NotImplementedException();
     }
 
-    private EQueryFilter? GetCurrentQueryFilter(string[] roles, string entityName)
+    private EAuthorityType? GetCurrentQueryFilter(string[] roles, string entityName)
     {
-        throw new NotImplementedException();
+        //查询对应表配置
+        var tableModel = _systemDataTableRepository.GetAsync(x => x.EntityName == entityName).Result;
+        //查询表对应数据权限
+        var authList = _systemDataAuthorityRepository.QueryExtAsync(x => roles.Contains(x.RoleCode),null,x=>x.OrderBy(d=>d.AuthorityType)).Result;
+        if (authList!=null && authList.Count>0)
+        {
+            return (EAuthorityType)authList[0].AuthorityType;
+        }
+        return null;
     }
 }

+ 4 - 2
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionScheme.cs

@@ -1,3 +1,5 @@
-namespace Hotline.Repository.SqlSugar.DataPermissions;
+using Hotline.Share.Enums;
 
-public record DataPermissionScheme(EQueryFilter QueryFilter, string? OrgCode = "", string? AreaId = "");
+namespace Hotline.Repository.SqlSugar.DataPermissions;
+
+public record DataPermissionScheme(EAuthorityType QueryFilter, string? OrgCode = "", string? AreaId = "");

+ 19 - 0
src/Hotline.Repository.SqlSugar/System/SystemDataTableRepository.cs

@@ -0,0 +1,19 @@
+using Hotline.Repository.SqlSugar.DataPermissions;
+using Hotline.Settings;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Dependency;
+
+namespace Hotline.Repository.SqlSugar.System
+{
+    public class SystemDataTableRepository : BaseRepository<SystemDataTable>, ISystemDataTableRepository, IScopeDependency
+    {
+        public SystemDataTableRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+        {
+        }
+    }
+}

+ 8 - 0
src/Hotline/Settings/ISystemDataTableRepository.cs

@@ -0,0 +1,8 @@
+using XF.Domain.Repository;
+
+namespace Hotline.Settings
+{
+    public interface ISystemDataTableRepository: IRepository<SystemDataTable>
+    {
+    }
+}