Explorar o código

1、增加自定义实体过滤器接口 2、增加假删除过滤器 3、增加租户种子数据 4、其他优化

zuohuaijun %!s(int64=4) %!d(string=hai) anos
pai
achega
9871e4242b

+ 10 - 0
Admin.NET/Admin.NET.Application/Admin.NET.Application.xml

@@ -4,6 +4,11 @@
         <name>Admin.NET.Application</name>
     </assembly>
     <members>
+        <member name="F:Admin.NET.Application.Const.TestConst.GroupName">
+            <summary>
+            API分组名称
+            </summary>
+        </member>
         <member name="F:Admin.NET.Application.Const.TestConst.ConfigId">
             <summary>
             自己业务数据库标识
@@ -29,6 +34,11 @@
             出生日期
             </summary>
         </member>
+        <member name="T:Admin.NET.Application.Filter.DataEntityFilter">
+            <summary>
+            自定义业务实体过滤器(XXX数据)
+            </summary>
+        </member>
         <member name="T:Admin.NET.Application.SeedData.TestSeedData">
             <summary>
             自己业务表种子数据

+ 5 - 0
Admin.NET/Admin.NET.Application/Const/TestConst.cs

@@ -2,6 +2,11 @@
 {
     public class TestConst
     {
+        /// <summary>
+        /// API分组名称
+        /// </summary>
+        public const string GroupName = "我的业务";
+
         /// <summary>
         /// 自己业务数据库标识
         /// </summary>

+ 33 - 0
Admin.NET/Admin.NET.Application/Filter/DataEntityFilter.cs

@@ -0,0 +1,33 @@
+using Admin.NET.Application.Entity;
+using Admin.NET.Core;
+using Furion;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+
+namespace Admin.NET.Application.Filter
+{
+    /// <summary>
+    /// 自定义业务实体过滤器(XXX数据)
+    /// </summary>
+    public class DataEntityFilter : IEntityFilter
+    {
+        public IEnumerable<TableFilterItem<object>> AddEntityFilter()
+        {
+            // 当前用户所属机构
+            var orgName = App.User?.FindFirst(ClaimConst.OrgName)?.Value;
+            if (string.IsNullOrWhiteSpace(orgName))
+                return null;
+
+            // 构造自定义条件的过滤器
+            Expression<Func<Test, bool>> dynamicExpression = u => u.Name.Contains(orgName);
+            var tableFilterItem = new TableFilterItem<object>(typeof(Test), dynamicExpression);
+
+            return new[]
+            {
+                tableFilterItem
+            };
+        }
+    }
+}

+ 3 - 2
Admin.NET/Admin.NET.Application/Service/TestService.cs

@@ -1,4 +1,5 @@
-using Admin.NET.Application.Entity;
+using Admin.NET.Application.Const;
+using Admin.NET.Application.Entity;
 using Admin.NET.Core;
 using Furion.DependencyInjection;
 using Furion.DynamicApiController;
@@ -11,7 +12,7 @@ namespace Admin.NET.Application.Serice
     /// <summary>
     /// 自己业务服务
     /// </summary>
-    [ApiDescriptionSettings("自己业务", Name = "自己业务", Order = 200)]
+    [ApiDescriptionSettings(TestConst.GroupName, Name = "XXX模块", Order = 200)]
     public class TestService : IDynamicApiController, ITransient
     {
         private readonly SqlSugarRepository<Test> _testRep;

+ 1 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -26,7 +26,7 @@
     <PackageReference Include="Magicodes.IE.Excel" Version="2.6.4" />
     <PackageReference Include="MySql.Data" Version="8.0.29" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.4" />
-    <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.12.0" />
+    <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.13.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.7.0" />
     <PackageReference Include="SqlSugarCore" Version="5.0.7.7-preview03" />
     <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.18" />

+ 45 - 7
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -6,12 +6,12 @@
     <members>
         <member name="T:Admin.NET.Core.NotLogAttribute">
             <summary>
-            禁用日志
+            禁用日志特性
             </summary>
         </member>
         <member name="T:Admin.NET.Core.NotTableAttribute">
             <summary>
-            非实体表继承该特性
+            非实体表特性
             </summary>
         </member>
         <member name="T:Admin.NET.Core.SqlSugarEntityAttribute">
@@ -49,7 +49,7 @@
         </member>
         <member name="T:Admin.NET.Core.SqlSugarUnitOfWorkAttribute">
             <summary>
-            SqlSugar 工作单元配置特性
+            SqlSugar工作单元配置特性
             </summary>
         </member>
         <member name="M:Admin.NET.Core.SqlSugarUnitOfWorkAttribute.#ctor">
@@ -2691,6 +2691,17 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="T:Admin.NET.Core.SysTenantSeedData">
+            <summary>
+            系统租户表种子数据
+            </summary>
+        </member>
+        <member name="M:Admin.NET.Core.SysTenantSeedData.HasData">
+            <summary>
+            种子数据
+            </summary>
+            <returns></returns>
+        </member>
         <member name="T:Admin.NET.Core.SysUserOrgSeedData">
             <summary>
             系统用户机构表种子数据
@@ -5669,9 +5680,26 @@
             <param name="userId"></param>
             <returns></returns>
         </member>
+        <member name="T:Admin.NET.Core.IEntityFilter">
+            <summary>
+            自定义实体过滤器接口
+            </summary>
+        </member>
+        <member name="M:Admin.NET.Core.IEntityFilter.AddEntityFilter">
+            <summary>
+            实体过滤器
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="T:Admin.NET.Core.ISqlSugarEntitySeedData`1">
+            <summary>
+            实体种子数据接口
+            </summary>
+            <typeparam name="TEntity"></typeparam>
+        </member>
         <member name="M:Admin.NET.Core.ISqlSugarEntitySeedData`1.HasData">
             <summary>
-            配置种子数据
+            种子数据
             </summary>
             <returns></returns>
         </member>
@@ -5764,14 +5792,24 @@
             <param name="type">排序类型</param>
             <returns>int</returns>
         </member>
-        <member name="M:Admin.NET.Core.SqlSugarSetup.SetDataEntityFilter(SqlSugar.SqlSugarProvider)">
+        <member name="M:Admin.NET.Core.SqlSugarSetup.SetDeletedEntityFilter(SqlSugar.SqlSugarProvider)">
+            <summary>
+            配置实体假删除过滤器
+            </summary>
+        </member>
+        <member name="M:Admin.NET.Core.SqlSugarSetup.SetOrgEntityFilter(SqlSugar.SqlSugarProvider)">
+            <summary>
+            配置实体机构过滤器
+            </summary>
+        </member>
+        <member name="M:Admin.NET.Core.SqlSugarSetup.SetCustomEntityFilter(SqlSugar.SqlSugarProvider)">
             <summary>
-            配置业务数据表过滤器
+            配置自定义实体过滤器
             </summary>
         </member>
         <member name="M:Admin.NET.Core.SqlSugarSetup.SetTenantEntityFilter(SqlSugar.SqlSugarProvider)">
             <summary>
-            配置租户过滤器
+            配置租户实体过滤器
             </summary>
         </member>
         <member name="M:Admin.NET.Core.SqlSugarSetup.DealConnectionStr(Admin.NET.Core.ConnectionStringsOptions@)">

+ 1 - 1
Admin.NET/Admin.NET.Core/Attribute/NotLogAttribute.cs

@@ -4,7 +4,7 @@ using System;
 namespace Admin.NET.Core
 {
     /// <summary>
-    /// 禁用日志
+    /// 禁用日志特性
     /// </summary>
     [SuppressSniffer, AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property)]
     public class NotLogAttribute : Attribute

+ 1 - 1
Admin.NET/Admin.NET.Core/Attribute/NotTableAttribute.cs

@@ -4,7 +4,7 @@ using System;
 namespace Admin.NET.Core
 {
     /// <summary>
-    /// 非实体表继承该特性
+    /// 非实体表特性
     /// </summary>
     [SuppressSniffer, AttributeUsage(AttributeTargets.Class)]
     public class NotTableAttribute : Attribute

+ 1 - 1
Admin.NET/Admin.NET.Core/Attribute/SqlSugarUnitOfWorkAttribute.cs

@@ -5,7 +5,7 @@ using System.Data;
 namespace Admin.NET.Core
 {
     /// <summary>
-    /// SqlSugar 工作单元配置特性
+    /// SqlSugar工作单元配置特性
     /// </summary>
     [SuppressSniffer, AttributeUsage(AttributeTargets.Method, Inherited = true)]
     public class SqlSugarUnitOfWorkAttribute : Attribute

+ 2 - 0
Admin.NET/Admin.NET.Core/Entity/SysUser.cs

@@ -122,6 +122,7 @@ namespace Admin.NET.Core
         /// 机构
         /// </summary>
         [SugarColumn(IsIgnore = true)]
+        [Navigate(NavigateType.OneToOne, nameof(OrgId))]
         public SysOrg SysOrg { get; set; }
 
         /// <summary>
@@ -134,6 +135,7 @@ namespace Admin.NET.Core
         /// 职位
         /// </summary>
         [SugarColumn(IsIgnore = true)]
+        [Navigate(NavigateType.OneToMany, nameof(PosId))]
         public SysPos SysPos { get; set; }
 
         /// <summary>

+ 24 - 0
Admin.NET/Admin.NET.Core/SeedData/SysTenantSeedData.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace Admin.NET.Core
+{
+    /// <summary>
+    /// 系统租户表种子数据
+    /// </summary>
+    public class SysTenantSeedData : ISqlSugarEntitySeedData<SysTenant>
+    {
+        /// <summary>
+        /// 种子数据
+        /// </summary>
+        /// <returns></returns>
+        public IEnumerable<SysTenant> HasData()
+        {
+            return new[]
+            {
+                new SysTenant{ Id=142307070918780, Name="租户1", AdminName="admin1", Host="www.dilon.vip", Email="zuohuaijun@163.com", Phone="18020030720", Connection="D://db//1.db", Remark="租户1", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+                new SysTenant{ Id=142307070918781, Name="租户2", AdminName="admin2", Host="www.dilon.top", Email="515096995@qq.com", Phone="18020030720", Connection="D://db//2.db", Remark="租户2", CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            };
+        }
+    }
+}

+ 3 - 1
Admin.NET/Admin.NET.Core/Service/Auth/AuthService.cs

@@ -59,7 +59,8 @@ namespace Admin.NET.Core.Service
             var encryptPasswod = MD5Encryption.Encrypt(input.Password); // 加密密码
 
             // 判断用户名密码
-            var user = await _sysUserRep.GetFirstAsync(u => u.UserName.Equals(input.UserName) && u.Password.Equals(encryptPasswod) && !u.IsDelete);
+            var user = await _sysUserRep.AsQueryable().Includes(u => u.SysOrg)
+                .FirstAsync(u => u.UserName.Equals(input.UserName) && u.Password.Equals(encryptPasswod));
             _ = user ?? throw Oops.Oh(ErrorCodeEnum.D1000);
 
             // 验证账号是否被冻结
@@ -75,6 +76,7 @@ namespace Admin.NET.Core.Service
                 {ClaimConst.RealName, user.RealName},
                 {ClaimConst.SuperAdmin, user.UserType},
                 {ClaimConst.OrgId, user.OrgId},
+                {ClaimConst.OrgName, user.SysOrg?.Name},
             });
 
             // 设置Swagger自动登录

+ 17 - 0
Admin.NET/Admin.NET.Core/SqlSugar/IEntityFilter.cs

@@ -0,0 +1,17 @@
+using SqlSugar;
+using System.Collections.Generic;
+
+namespace Admin.NET.Core
+{
+    /// <summary>
+    /// 自定义实体过滤器接口
+    /// </summary>
+    public interface IEntityFilter
+    {
+        /// <summary>
+        /// 实体过滤器
+        /// </summary>
+        /// <returns></returns>
+        IEnumerable<TableFilterItem<object>> AddEntityFilter();
+    }
+}

+ 5 - 1
Admin.NET/Admin.NET.Core/SqlSugar/ISqlSugarEntitySeedData.cs

@@ -2,11 +2,15 @@
 
 namespace Admin.NET.Core
 {
+    /// <summary>
+    /// 实体种子数据接口
+    /// </summary>
+    /// <typeparam name="TEntity"></typeparam>
     public interface ISqlSugarEntitySeedData<TEntity>
         where TEntity : class, new()
     {
         /// <summary>
-        /// 配置种子数据
+        /// 种子数据
         /// </summary>
         /// <returns></returns>
         IEnumerable<TEntity> HasData();

+ 51 - 14
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -123,9 +123,13 @@ namespace Admin.NET.Core
                             }
                         };
 
-                        // 配置业务数据过滤器
-                        SetDataEntityFilter(dbProvider);
-                        // 配置租户过滤器
+                        // 配置实体假删除过滤器
+                        SetDeletedEntityFilter(dbProvider);
+                        // 配置实体机构过滤器
+                        SetOrgEntityFilter(dbProvider);
+                        // 配置自定义实体过滤器
+                        SetCustomEntityFilter(dbProvider);
+                        // 配置租户实体过滤器
                         SetTenantEntityFilter(dbProvider);
                     });
                 });
@@ -207,9 +211,26 @@ namespace Admin.NET.Core
         }
 
         /// <summary>
-        /// 配置业务数据表过滤器
+        /// 配置实体假删除过滤器
         /// </summary>
-        public static async void SetDataEntityFilter(SqlSugarProvider db)
+        public static void SetDeletedEntityFilter(SqlSugarProvider db)
+        {
+            // 获取所有继承基类数据表集合
+            var entityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass
+                && u.BaseType == typeof(EntityBase));
+            if (!entityTypes.Any()) return;
+
+            foreach (var entityType in entityTypes)
+            {
+                Expression<Func<DataEntityBase, bool>> dynamicExpression = u => u.IsDelete == false;
+                db.QueryFilter.Add(new TableFilterItem<object>(entityType, dynamicExpression));
+            }
+        }
+
+        /// <summary>
+        /// 配置实体机构过滤器
+        /// </summary>
+        public static async void SetOrgEntityFilter(SqlSugarProvider db)
         {
             // 获取业务数据表集合
             var dataEntityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass
@@ -225,17 +246,34 @@ namespace Admin.NET.Core
 
             foreach (var dataEntityType in dataEntityTypes)
             {
-                foreach (var orgId in orgIds)
-                {
-                    Expression<Func<DataEntityBase, bool>> dynamicExpression = u => u.CreateOrgId == orgId;
-                    Expression exp = dynamicExpression;
-                    db.QueryFilter.Add(new TableFilterItem<object>(dataEntityType, exp)); // 设置表过滤器 
-                }
+                Expression<Func<DataEntityBase, bool>> dynamicExpression = u => orgIds.Contains((long)u.CreateOrgId);
+                db.QueryFilter.Add(new TableFilterItem<object>(dataEntityType, dynamicExpression));
+            }
+        }
+
+        /// <summary>
+        /// 配置自定义实体过滤器
+        /// </summary>
+        public static void SetCustomEntityFilter(SqlSugarProvider db)
+        {
+            // 获取继承自定义实体过滤器接口的类集合
+            var entityFilterTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass
+                && u.GetInterfaces().Any(i => i.HasImplementedRawGeneric(typeof(IEntityFilter))));
+            if (!entityFilterTypes.Any()) return;
+
+            foreach (var entityFilter in entityFilterTypes)
+            {
+                var instance = Activator.CreateInstance(entityFilter);
+                var entityFilterMethod = entityFilter.GetMethod("AddEntityFilter");
+                var entityFilters = ((IList)entityFilterMethod?.Invoke(instance, null))?.Cast<object>();
+                if (entityFilters == null) continue;
+                foreach (TableFilterItem<object> filter in entityFilters)
+                    db.QueryFilter.Add(filter);
             }
         }
 
         /// <summary>
-        /// 配置租户过滤器
+        /// 配置租户实体过滤器
         /// </summary>
         public static void SetTenantEntityFilter(SqlSugarProvider db)
         {
@@ -250,8 +288,7 @@ namespace Admin.NET.Core
             foreach (var dataEntityType in dataEntityTypes)
             {
                 Expression<Func<EntityTenant, bool>> dynamicExpression = u => u.TenantId == long.Parse(tenantId);
-                Expression exp = dynamicExpression;
-                db.QueryFilter.Add(new TableFilterItem<object>(dataEntityType, exp)); // 设置表过滤器 
+                db.QueryFilter.Add(new TableFilterItem<object>(dataEntityType, dynamicExpression));
             }
         }
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
Admin.NET/Admin.NET.Web.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio