Browse Source

修复租户初始化错误数据

zhontai 2 years ago
parent
commit
9649b915f8

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_role.json

@@ -3,7 +3,7 @@
     "id": 161223412080709,
     "parentId": 336557474730053,
     "name": "主管理员",
-    "code": "admin",
+    "code": "main-admin",
     "description": ""
   },
   {

+ 1 - 1
src/hosts/ZhonTai.Host/InitData/Admin/ad_role.tenant.json

@@ -4,7 +4,7 @@
     "tenantId": 161223412138053,
     "parentId": 336557474730053,
     "name": "主管理员",
-    "code": "admin",
+    "code": "main-admin",
     "description": ""
   },
   {

+ 5 - 0
src/platform/ZhonTai.Admin/Core/Auth/IUser.cs

@@ -29,6 +29,11 @@ public interface IUser
     /// </summary>
     UserType Type { get; }
 
+    /// <summary>
+    /// 默认用户
+    /// </summary>
+    bool DefaultUser { get; }
+
     /// <summary>
     /// 平台管理员
     /// </summary>

+ 13 - 1
src/platform/ZhonTai.Admin/Core/Auth/User.cs

@@ -98,10 +98,22 @@ public class User : IUser
             {
                 return (UserType)Enum.Parse(typeof(UserType), userType.Value, true);
             }
-            return UserType.User;
+            return UserType.DefaultUser;
         }
     }
 
+    /// <summary>
+    /// 默认用户
+    /// </summary>
+    public virtual bool DefaultUser
+    {
+        get
+        {
+            return Type == UserType.DefaultUser;
+        }
+    }
+
+
     /// <summary>
     /// 平台管理员
     /// </summary>

+ 5 - 0
src/platform/ZhonTai.Admin/Core/Db/FreeSqlCloudExtesions.cs

@@ -86,6 +86,11 @@ public static class FreeSqlCloudExtesions
 
         #endregion 审计数据
 
+        if (appConfig.Tenant)
+        {
+            fsql.GlobalFilter.Apply<ITenant>("Tenant", a => a.TenantId == user.TenantId);
+        }
+
         return fsql;
     }
 

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/PermissionApi/PermissionApiEntity.cs

@@ -25,7 +25,7 @@ public class PermissionApiEntity : EntityAdd
     /// <summary>
     /// 接口Id
     /// </summary>
-		public long ApiId { get; set; }
+	public long ApiId { get; set; }
 
     /// <summary>
     /// 接口

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/User/UserEntity.cs

@@ -91,7 +91,7 @@ public partial class UserEntity : EntityFull, ITenant
     /// 用户类型
     /// </summary>
     [Column(MapType = typeof(int))]
-    public UserType Type { get; set; } = UserType.User;
+    public UserType Type { get; set; } = UserType.DefaultUser;
 
     /// <summary>
     /// 角色列表

+ 2 - 2
src/platform/ZhonTai.Admin/Domain/User/UserType.cs

@@ -6,9 +6,9 @@
 public enum UserType
 {
     /// <summary>
-    /// 用户
+    /// 默认用户
     /// </summary>
-    User = 1,
+    DefaultUser = 1,
 
     /// <summary>
     /// 租户管理员

+ 61 - 31
src/platform/ZhonTai.Admin/Services/Auth/AuthService.cs

@@ -30,6 +30,10 @@ using ZhonTai.Common.Extensions;
 using ZhonTai.Common.Helpers;
 using ZhonTai.DynamicApi;
 using ZhonTai.DynamicApi.Attributes;
+using FreeSql;
+using Microsoft.Extensions.DependencyInjection;
+using ZhonTai.Admin.Domain.TenantPermission;
+using ZhonTai.Admin.Core.Db;
 
 namespace ZhonTai.Admin.Services.Auth;
 
@@ -120,45 +124,71 @@ public class AuthService : BaseService, IAuthService, IDynamicApi
             return ResultOutput.NotOk("未登录");
         }
 
-        var permissionSelect = _permissionRepository.Select
-            .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type))
-            .WhereIf(!User.PlatformAdmin, a =>
-                _permissionRepository.Orm.Select<RolePermissionEntity>()
-                .InnerJoin<UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
-                .Where(b => b.PermissionId == a.Id)
-                .Any()
-            );
+        var authGetUserInfoOutput = new AuthGetUserInfoOutput
+        {
+            //用户信息
+            User = await _userRepository.GetAsync<AuthUserProfileDto>(User.Id)
+        };
+
+        
+        IFreeSql db = _permissionRepository.Orm;
+        if (User.TenantAdmin)
+        {
+            var cloud = ServiceProvider.GetRequiredService<FreeSqlCloud>();
+            db = cloud.Use(DbKeys.AdminDbKey);
+        }
+       
+        var permissionRepository = db.GetRepositoryBase<PermissionEntity>();
+        var menuSelect = permissionRepository.Select
+            .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type));
+
+        var dotSelect = permissionRepository.Select.Where(a => a.Type == PermissionType.Dot);
 
         if (!User.PlatformAdmin)
         {
-            permissionSelect = permissionSelect.AsTreeCte(up: true);
+            if (User.TenantAdmin)
+            {
+                menuSelect = menuSelect.Where(a =>
+                   db.Select<TenantPermissionEntity>()
+                   .Where(b => b.PermissionId == a.Id && b.TenantId == User.TenantId)
+                   .Any()
+               );
+
+                dotSelect = dotSelect.Where(a =>
+                   db.Select<TenantPermissionEntity>()
+                   .Where(b => b.PermissionId == a.Id && b.TenantId == User.TenantId)
+                   .Any()
+                );
+            }
+            else
+            {
+                menuSelect = menuSelect.Where(a =>
+                   db.Select<RolePermissionEntity>()
+                   .InnerJoin<UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
+                   .Where(b => b.PermissionId == a.Id)
+                   .Any()
+               );
+
+                dotSelect = dotSelect.Where(a =>
+                    db.Select<RolePermissionEntity>()
+                    .InnerJoin<UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
+                    .Where(b => b.PermissionId == a.Id)
+                    .Any()
+                );
+            }
+
+            menuSelect = menuSelect.AsTreeCte(up: true);
         }
 
-        var menuList = await permissionSelect
+        var menuList = await menuSelect
             .OrderBy(a => new { a.ParentId, a.Sort })
             .ToListAsync(a => new AuthUserMenuDto { ViewPath = a.View.Path });
-        
-        menuList = menuList.DistinctBy(a => a.Id).ToList();
 
-        var authGetUserInfoOutput = new AuthGetUserInfoOutput
-        {
-            //用户信息
-            User = await _userRepository.GetAsync<AuthUserProfileDto>(User.Id),
-
-            //用户菜单
-            Menus = menuList,
-
-            //用户权限点
-            Permissions = await _permissionRepository.Select
-            .Where(a => a.Type == PermissionType.Dot)
-            .WhereIf(!User.PlatformAdmin, a =>
-                _permissionRepository.Orm.Select<RolePermissionEntity>()
-                .InnerJoin<UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
-                .Where(b => b.PermissionId == a.Id)
-                .Any()
-            )
-            .ToListAsync(a => a.Code)
-        };
+        //用户菜单
+        authGetUserInfoOutput.Menus = menuList.DistinctBy(a => a.Id).ToList();
+
+        //用户权限点
+        authGetUserInfoOutput.Permissions = await dotSelect.ToListAsync(a => a.Code);
 
         return ResultOutput.Ok(authGetUserInfoOutput);
     }

+ 1 - 1
src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs

@@ -355,7 +355,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
         if (input.ApiIds != null && input.ApiIds.Any())
         {
             var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = entity.Id, ApiId = a });
-            await _permissionApiRepository.InsertAsync(permissionApis);
+            await _permissionApiRepository.InsertAsync(permissionApis.ToList());
         }
 
         //清除用户权限缓存

+ 14 - 2
src/platform/ZhonTai.Admin/Services/Tenant/TenantService.cs

@@ -135,7 +135,9 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             Name = input.RealName,
             Mobile = input.Phone,
             Email = input.Email,
-            Status = UserStatus.Enabled
+            Status = UserStatus.Enabled,
+            Type = UserType.TenantAdmin,
+            MainOrgId = org.Id
         };
         await _userRepository.InsertAsync(user);
 
@@ -157,12 +159,22 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
         };
         await _userOrgRepository.InsertAsync(userOrg);
 
+        //添加角色分组
+        var roleGroup = new RoleEntity
+        {
+            TenantId = tenantId,
+            Name = "系统默认",
+            ParentId = 0
+        };
+        await _roleRepository.InsertAsync(roleGroup);
+
         //添加角色
         var role = new RoleEntity
         {
             TenantId = tenantId,
             Name = "主管理员",
-            Code = "admin"
+            Code = "main-admin",
+            ParentId = roleGroup.Id
         };
         await _roleRepository.InsertAsync(role);
 

+ 16 - 1
src/platform/ZhonTai.Admin/Services/User/UserService.cs

@@ -26,6 +26,8 @@ using ZhonTai.Admin.Domain.Staff;
 using ZhonTai.Admin.Domain;
 using ZhonTai.Admin.Domain.Org;
 using System.Data;
+using ZhonTai.Admin.Domain.TenantPermission;
+using FreeSql;
 
 namespace ZhonTai.Admin.Services.User;
 
@@ -160,8 +162,21 @@ public class UserService : BaseService, IUserService, IDynamicApi
         var key = string.Format(CacheKeys.UserPermissions, User.Id);
         var result = await Cache.GetOrSetAsync(key, async () =>
         {
+            if (User.TenantAdmin)
+            {
+                var cloud = LazyGetRequiredService<FreeSqlCloud>();
+                var db = cloud.Use(DbKeys.AdminDbKey);
+
+                return await db.Select<ApiEntity>()
+                .Where(a => db.Select<TenantPermissionEntity, PermissionApiEntity>()
+                .InnerJoin((b, c) => b.PermissionId == c.PermissionId && b.TenantId == User.TenantId)
+                .Where((b, c) => c.ApiId == a.Id).Any())
+                .ToListAsync<UserPermissionsOutput>();
+            }
+
+
             return await _apiRepository
-            .Where(a => _userRoleRepository.Orm.Select<UserRoleEntity, RolePermissionEntity, PermissionApiEntity>()
+            .Where(a => _apiRepository.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())

+ 12 - 2
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -137,6 +137,11 @@
             用户类型
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Core.Auth.IUser.DefaultUser">
+            <summary>
+            默认用户
+            </summary>
+        </member>
         <member name="P:ZhonTai.Admin.Core.Auth.IUser.PlatformAdmin">
             <summary>
             平台管理员
@@ -210,6 +215,11 @@
             用户类型
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Core.Auth.User.DefaultUser">
+            <summary>
+            默认用户
+            </summary>
+        </member>
         <member name="P:ZhonTai.Admin.Core.Auth.User.PlatformAdmin">
             <summary>
             平台管理员
@@ -2609,9 +2619,9 @@
             用户类型
             </summary>
         </member>
-        <member name="F:ZhonTai.Admin.Domain.User.UserType.User">
+        <member name="F:ZhonTai.Admin.Domain.User.UserType.DefaultUser">
             <summary>
-            用户
+            默认用户
             </summary>
         </member>
         <member name="F:ZhonTai.Admin.Domain.User.UserType.TenantAdmin">