0
0
Bläddra i källkod

新增权限接口表
权限管理删除接口,新增权限点可关联多接口
数据导入和导出增加租户权限数据
更新数据包

zhontai 3 år sedan
förälder
incheckning
78bb17faf7

+ 3 - 0
Admin.Core.Model/Admin/ApiEntity.cs

@@ -59,5 +59,8 @@ namespace Admin.Core.Model.Admin
         /// 启用
         /// </summary>
         public bool Enabled { get; set; } = true;
+
+        [Navigate(ManyToMany = typeof(PermissionApiEntity))]
+        public ICollection<PermissionEntity> Permissions { get; set; }
     }
 }

+ 33 - 0
Admin.Core.Model/Admin/PermissionApiEntity.cs

@@ -0,0 +1,33 @@
+using Admin.Core.Common.BaseModel;
+using FreeSql.DataAnnotations;
+
+namespace Admin.Core.Model.Admin
+{
+    /// <summary>
+    /// 权限接口
+    /// </summary>
+	[Table(Name = "ad_permission_api")]
+    [Index("idx_{tablename}_01", nameof(PermissionId) + "," + nameof(ApiId), true)]
+    public class PermissionApiEntity : EntityAdd
+    {
+        /// <summary>
+        /// 权限Id
+        /// </summary>
+		public long PermissionId { get; set; }
+        
+        /// <summary>
+        /// 权限
+        /// </summary>
+        public PermissionEntity Permission { get; set; }
+
+        /// <summary>
+        /// 接口Id
+        /// </summary>
+		public long ApiId { get; set; }
+
+        /// <summary>
+        /// 接口
+        /// </summary>
+        public ApiEntity Api { get; set; }
+    }
+}

+ 3 - 0
Admin.Core.Model/Admin/PermissionEntity.cs

@@ -103,5 +103,8 @@ namespace Admin.Core.Model.Admin
         /// </summary>
         [Column(StringLength = 100)]
         public string Description { get; set; }
+
+        [Navigate(ManyToMany = typeof(PermissionApiEntity))]
+        public ICollection<ApiEntity> Apis { get; set; }
     }
 }

+ 1 - 6
Admin.Core.Model/Admin/PermissionType.cs

@@ -15,14 +15,9 @@
         /// </summary>
         Menu = 2,
 
-        /// <summary>
-        /// 接口
-        /// </summary>
-        Api = 3,
-
         /// <summary>
         /// 权限点
         /// </summary>
-        Dot = 4
+        Dot = 3
     }
 }

+ 2 - 0
Admin.Core.Repository/Base/Data.cs

@@ -18,5 +18,7 @@ namespace Admin.Core.Repository
         public UserRoleEntity[] UserRoles { get; set; }
         public RolePermissionEntity[] RolePermissions { get; set; }
         public TenantEntity[] Tenants { get; set; }
+        public TenantPermissionEntity[] TenantPermissions { get; set; }
+        public PermissionApiEntity[] PermissionApis { get; set; }
     }
 }

+ 39 - 13
Admin.Core.Repository/Base/DbHelper.cs

@@ -145,7 +145,7 @@ namespace Admin.Core.Repository
                 return;
             }
 
-            if (e.AuditValueType == FreeSql.Aop.AuditValueType.Insert)
+            if (e.AuditValueType == AuditValueType.Insert)
             {
                 switch (e.Property.Name)
                 {
@@ -420,6 +420,8 @@ namespace Admin.Core.Repository
                     await InitDtDataAsync(db, uow, tran, data.UserRoles, dbConfig);
                     await InitDtDataAsync(db, uow, tran, data.RolePermissions, dbConfig);
                     await InitDtDataAsync(db, uow, tran, data.Tenants, dbConfig);
+                    await InitDtDataAsync(db, uow, tran, data.TenantPermissions, dbConfig);
+                    await InitDtDataAsync(db, uow, tran, data.PermissionApis, dbConfig);
 
                     uow.Commit();
                 }
@@ -462,7 +464,7 @@ namespace Admin.Core.Repository
                 //    a.Sort
                 //});
 
-                #endregion 数据字典
+                #endregion
 
                 #region 接口
 
@@ -481,7 +483,7 @@ namespace Admin.Core.Repository
                     r.Childs.AddRange(datalist);
                 });
 
-                #endregion 接口
+                #endregion
 
                 #region 视图
 
@@ -500,7 +502,7 @@ namespace Admin.Core.Repository
                    r.Childs.AddRange(datalist);
                });
 
-                #endregion 视图
+                #endregion
 
                 #region 权限
 
@@ -519,7 +521,7 @@ namespace Admin.Core.Repository
                    r.Childs.AddRange(datalist);
                });
 
-                #endregion 权限
+                #endregion
 
                 #region 用户
 
@@ -535,7 +537,7 @@ namespace Admin.Core.Repository
                     a.Remark
                 });
 
-                #endregion 用户
+                #endregion
 
                 #region 角色
 
@@ -549,7 +551,7 @@ namespace Admin.Core.Repository
                     a.Description
                 });
 
-                #endregion 角色
+                #endregion
 
                 #region 用户角色
 
@@ -560,7 +562,7 @@ namespace Admin.Core.Repository
                     a.RoleId
                 });
 
-                #endregion 用户角色
+                #endregion
 
                 #region 角色权限
 
@@ -571,7 +573,7 @@ namespace Admin.Core.Repository
                     a.PermissionId
                 });
 
-                #endregion 角色权限
+                #endregion
 
                 #region 租户
 
@@ -594,9 +596,31 @@ namespace Admin.Core.Repository
                     a.Description
                 });
 
-                #endregion 租户
+                #endregion
+
+                #region 租户权限
+
+                var tenantPermissions = await db.Queryable<TenantPermissionEntity>().ToListAsync(a => new
+                {
+                    a.Id,
+                    a.TenantId,
+                    a.PermissionId
+                });
+
+                #endregion
+
+                #region 权限接口
+
+                var permissionApis = await db.Queryable<PermissionApiEntity>().ToListAsync(a => new
+                {
+                    a.Id,
+                    a.PermissionId,
+                    a.ApiId
+                });
+
+                #endregion
 
-                #endregion 数据表
+                #endregion
 
                 if (!(users?.Count > 0))
                 {
@@ -620,7 +644,9 @@ namespace Admin.Core.Repository
                     roles,
                     userRoles,
                     rolePermissions,
-                    tenants
+                    tenants,
+                    tenantPermissions,
+                    permissionApis
                 },
                 //Formatting.Indented,
                 settings
@@ -630,7 +656,7 @@ namespace Admin.Core.Repository
                 var filePath = Path.Combine(Directory.GetCurrentDirectory(), $"Db/Data/{fileName}").ToPath();
                 FileHelper.WriteFile(filePath, jsonData);
 
-                #endregion 生成数据
+                #endregion
 
                 Console.WriteLine(" generate data succeed\r\n");
             }

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

@@ -76,7 +76,7 @@ namespace Admin.Core.Service.Admin.Auth
 
                 //用户权限点
                 authUserInfoOutput.Permissions = await _permissionRepository.Select
-                    .Where(a => new[] { PermissionType.Api, PermissionType.Dot }.Contains(a.Type))
+                    .Where(a => a.Type == PermissionType.Dot)
                     .Where(a =>
                         _permissionRepository.Orm.Select<RolePermissionEntity>()
                         .InnerJoin<UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)

+ 5 - 0
Admin.Core.Service/Admin/Permission/Input/PermissionAddDotInput.cs

@@ -33,5 +33,10 @@ namespace Admin.Core.Service.Admin.Permission.Input
         /// ͼ±ê
         /// </summary>
         public string Icon { get; set; }
+
+        /// <summary>
+        /// ½Ó¿Ú
+        /// </summary>
+        public long[] ApiIds { get; set; }
     }
 }

+ 40 - 10
Admin.Core.Service/Admin/Permission/PermissionService.cs

@@ -25,6 +25,7 @@ namespace Admin.Core.Service.Admin.Permission
         private readonly IUserRepository _userRepository;
         private readonly IRepositoryBase<TenantPermissionEntity> _tenantPermissionRepository;
         private readonly IRepositoryBase<UserRoleEntity> _userRoleRepository;
+        private readonly IRepositoryBase<PermissionApiEntity> _permissionApiRepository;
 
         public PermissionService(
             AppConfig appConfig,
@@ -33,7 +34,8 @@ namespace Admin.Core.Service.Admin.Permission
             IRolePermissionRepository rolePermissionRepository,
             IUserRepository userRepository,
             IRepositoryBase<TenantPermissionEntity> tenantPermissionRepository,
-            IRepositoryBase<UserRoleEntity> userRoleRepository
+            IRepositoryBase<UserRoleEntity> userRoleRepository,
+            IRepositoryBase<PermissionApiEntity> permissionApiRepository
         )
         {
             _appConfig = appConfig;
@@ -43,6 +45,7 @@ namespace Admin.Core.Service.Admin.Permission
             _userRepository = userRepository;
             _tenantPermissionRepository = tenantPermissionRepository;
             _userRoleRepository = userRoleRepository;
+            _permissionApiRepository = permissionApiRepository;
         }
 
         public async Task<IResponseOutput> GetAsync(long id)
@@ -72,8 +75,14 @@ namespace Admin.Core.Service.Admin.Permission
 
         public async Task<IResponseOutput> GetDotAsync(long id)
         {
-            var result = await _permissionRepository.GetAsync<PermissionGetDotOutput>(id);
-            return ResponseOutput.Ok(result);
+            var entity = await _permissionRepository.Select
+            .WhereDynamic(id)
+            .IncludeMany(a => a.Apis.Select(b => new ApiEntity { Id = b.Id }))
+            .ToOneAsync();
+
+            var output = Mapper.Map<PermissionGetDotOutput>(entity);
+
+            return ResponseOutput.Ok(output);
         }
 
         public async Task<IResponseOutput> ListAsync(string key, DateTime? start, DateTime? end)
@@ -117,11 +126,18 @@ namespace Admin.Core.Service.Admin.Permission
             return ResponseOutput.Ok(id > 0);
         }
 
+        [Transaction]
         public async Task<IResponseOutput> AddDotAsync(PermissionAddDotInput input)
         {
             var entity = Mapper.Map<PermissionEntity>(input);
             var id = (await _permissionRepository.InsertAsync(entity)).Id;
 
+            if (input.ApiIds != null && input.ApiIds.Any())
+            {
+                var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = id, ApiId = a });
+                await _permissionApiRepository.InsertAsync(permissionApis);
+            }
+
             return ResponseOutput.Ok(id > 0);
         }
 
@@ -166,15 +182,29 @@ namespace Admin.Core.Service.Admin.Permission
 
         public async Task<IResponseOutput> UpdateDotAsync(PermissionUpdateDotInput input)
         {
-            var result = false;
-            if (input != null && input.Id > 0)
+            if (!(input?.Id > 0))
             {
-                var entity = await _permissionRepository.GetAsync(input.Id);
-                entity = Mapper.Map(input, entity);
-                result = (await _permissionRepository.UpdateAsync(entity)) > 0;
+                return ResponseOutput.NotOk();
             }
 
-            return ResponseOutput.Result(result);
+            var entity = await _permissionRepository.GetAsync(input.Id);
+            if (!(entity?.Id > 0))
+            {
+                return ResponseOutput.NotOk("ȨÏ޵㲻´æÔÚ£¡");
+            }
+
+            Mapper.Map(input, entity);
+            await _permissionRepository.UpdateAsync(entity);
+
+            await _permissionApiRepository.DeleteAsync(a => a.PermissionId == entity.Id);
+
+            if (input.ApiIds != null && input.ApiIds.Any())
+            {
+                var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = entity.Id, ApiId = a });
+                await _permissionApiRepository.InsertAsync(permissionApis);
+            }
+
+            return ResponseOutput.Ok();
         }
 
         public async Task<IResponseOutput> DeleteAsync(long id)
@@ -310,7 +340,7 @@ namespace Admin.Core.Service.Admin.Permission
                 .ToListAsync(a => new { a.Id, a.ParentId, a.Label, a.Type });
 
             var apis = permissions
-                .Where(a => new[] { PermissionType.Api, PermissionType.Dot }.Contains(a.Type))
+                .Where(a => a.Type == PermissionType.Dot)
                 .Select(a => new { a.Id, a.ParentId, a.Label });
 
             var menus = permissions

+ 7 - 0
Admin.Core.Service/Admin/Permission/_MapConfig.cs

@@ -1,6 +1,8 @@
 using Admin.Core.Model.Admin;
 using Admin.Core.Service.Admin.Permission.Input;
+using Admin.Core.Service.Admin.Permission.Output;
 using AutoMapper;
+using System.Linq;
 
 namespace Admin.Core.Service.Admin.Permission
 {
@@ -20,6 +22,11 @@ namespace Admin.Core.Service.Admin.Permission
             CreateMap<PermissionUpdateMenuInput, PermissionEntity>();
             CreateMap<PermissionUpdateApiInput, PermissionEntity>();
             CreateMap<PermissionUpdateDotInput, PermissionEntity>();
+
+            CreateMap<PermissionEntity, PermissionGetDotOutput>().ForMember(
+                d => d.ApiIds,
+                m => m.MapFrom(s => s.Apis.Select(a => a.Id))
+            );
         }
     }
 }

+ 12 - 7
Admin.Core.Service/Admin/User/UserService.cs

@@ -25,13 +25,15 @@ namespace Admin.Core.Service.Admin.User
         private readonly IUserRoleRepository _userRoleRepository;
         private readonly IRolePermissionRepository _rolePermissionRepository;
         private readonly ITenantRepository _tenantRepository;
+        private readonly IApiRepository _apiRepository;
 
         public UserService(
             AppConfig appConfig,
             IUserRepository userRepository,
             IUserRoleRepository userRoleRepository,
             IRolePermissionRepository rolePermissionRepository,
-            ITenantRepository tenantRepository
+            ITenantRepository tenantRepository,
+            IApiRepository apiRepository
         )
         {
             _appConfig = appConfig;
@@ -39,6 +41,7 @@ namespace Admin.Core.Service.Admin.User
             _userRoleRepository = userRoleRepository;
             _rolePermissionRepository = rolePermissionRepository;
             _tenantRepository = tenantRepository;
+            _apiRepository = apiRepository;
         }
 
         public async Task<ResponseOutput<AuthLoginOutput>> GetLoginUserAsync(long id)
@@ -83,12 +86,12 @@ namespace Admin.Core.Service.Admin.User
             var key = string.Format(CacheKey.UserPermissions, User.Id);
             var result = await Cache.GetOrSetAsync(key, async () =>
             {
-                var userPermissoins = await _rolePermissionRepository.Select
-                .InnerJoin<UserRoleEntity>((a, b) => a.RoleId == b.RoleId && b.UserId == User.Id && a.Permission.Type == PermissionType.Api)
-                .Include(a => a.Permission.Api)
-                .Distinct()
-                .ToListAsync(a => new UserPermissionsOutput { HttpMethods = a.Permission.Api.HttpMethods, Path = a.Permission.Api.Path });
-                return userPermissoins;
+                return await _apiRepository
+                .Where(a => _userRoleRepository.Orm.Select<UserRoleEntity, RolePermissionEntity, PermissionApiEntity>()
+                .InnerJoin((b, c, d) => b.RoleId == c.RoleId && b.UserId == User.Id)
+                .InnerJoin((b, c, d) => c.PermissionId == d.PermissionId)
+                .Where((b, c, d) => d.ApiId == a.Id).Any())
+                .ToListAsync<UserPermissionsOutput>();
             });
             return result;
         }
@@ -155,7 +158,9 @@ namespace Admin.Core.Service.Admin.User
 
             Mapper.Map(input, user);
             await _userRepository.UpdateAsync(user);
+
             await _userRoleRepository.DeleteAsync(a => a.UserId == user.Id);
+
             if (input.RoleIds != null && input.RoleIds.Any())
             {
                 var roles = input.RoleIds.Select(a => new UserRoleEntity { UserId = user.Id, RoleId = a });

+ 25 - 5
Admin.Core/Admin.Core.Model.xml

@@ -284,6 +284,31 @@
             操作参数
             </summary>
         </member>
+        <member name="T:Admin.Core.Model.Admin.PermissionApiEntity">
+            <summary>
+            权限接口
+            </summary>
+        </member>
+        <member name="P:Admin.Core.Model.Admin.PermissionApiEntity.PermissionId">
+            <summary>
+            权限Id
+            </summary>
+        </member>
+        <member name="P:Admin.Core.Model.Admin.PermissionApiEntity.Permission">
+            <summary>
+            权限
+            </summary>
+        </member>
+        <member name="P:Admin.Core.Model.Admin.PermissionApiEntity.ApiId">
+            <summary>
+            接口Id
+            </summary>
+        </member>
+        <member name="P:Admin.Core.Model.Admin.PermissionApiEntity.Api">
+            <summary>
+            接口
+            </summary>
+        </member>
         <member name="T:Admin.Core.Model.Admin.PermissionEntity">
             <summary>
             权限
@@ -384,11 +409,6 @@
             菜单
             </summary>
         </member>
-        <member name="F:Admin.Core.Model.Admin.PermissionType.Api">
-            <summary>
-            接口
-            </summary>
-        </member>
         <member name="F:Admin.Core.Model.Admin.PermissionType.Dot">
             <summary>
             权限点

+ 5 - 0
Admin.Core/Admin.Core.Service.xml

@@ -1000,6 +1000,11 @@
             图标
             </summary>
         </member>
+        <member name="P:Admin.Core.Service.Admin.Permission.Input.PermissionAddDotInput.ApiIds">
+            <summary>
+            接口
+            </summary>
+        </member>
         <member name="P:Admin.Core.Service.Admin.Permission.Input.PermissionAddGroupInput.Type">
             <summary>
             权限类型

+ 1 - 0
Admin.Core/Db/DBServiceCollectionExtensions.cs

@@ -54,6 +54,7 @@ namespace Admin.Core.Db
             #endregion 监听所有命令
 
             var fsql = freeSqlBuilder.Build();
+            fsql.GlobalFilter.Apply<IEntitySoftDelete>("SoftDelete", a => a.IsDeleted == false);
 
             //配置实体
             var appConfig = new ConfigHelper().Get<AppConfig>("appconfig", env.EnvironmentName);

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 5744
Admin.Core/Db/Data/data-share.json


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 5438
Admin.Core/Db/Data/data.json


Vissa filer visades inte eftersom för många filer har ändrats