|  | @@ -4,6 +4,7 @@ using Admin.Core.Common.Cache;
 | 
	
		
			
				|  |  |  using Admin.Core.Common.Configs;
 | 
	
		
			
				|  |  |  using Admin.Core.Common.Output;
 | 
	
		
			
				|  |  |  using Admin.Core.Model.Admin;
 | 
	
		
			
				|  |  | +using Admin.Core.Repository;
 | 
	
		
			
				|  |  |  using Admin.Core.Repository.Admin;
 | 
	
		
			
				|  |  |  using Admin.Core.Service.Admin.Permission.Input;
 | 
	
		
			
				|  |  |  using Admin.Core.Service.Admin.Permission.Output;
 | 
	
	
		
			
				|  | @@ -20,21 +21,24 @@ namespace Admin.Core.Service.Admin.Permission
 | 
	
		
			
				|  |  |          private readonly IPermissionRepository _permissionRepository;
 | 
	
		
			
				|  |  |          private readonly IRoleRepository _roleRepository;
 | 
	
		
			
				|  |  |          private readonly IRolePermissionRepository _rolePermissionRepository;
 | 
	
		
			
				|  |  | -        private readonly ITenantRepository _tenantRepository;
 | 
	
		
			
				|  |  | +        private readonly IRepositoryBase<TenantPermissionEntity> _tenantPermissionRepository;
 | 
	
		
			
				|  |  | +        private readonly IUserRepository _userRepository;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public PermissionService(
 | 
	
		
			
				|  |  |              AppConfig appConfig,
 | 
	
		
			
				|  |  |              IPermissionRepository permissionRepository,
 | 
	
		
			
				|  |  |              IRoleRepository roleRepository,
 | 
	
		
			
				|  |  |              IRolePermissionRepository rolePermissionRepository,
 | 
	
		
			
				|  |  | -            ITenantRepository tenantRepository
 | 
	
		
			
				|  |  | +            IRepositoryBase<TenantPermissionEntity> tenantPermissionRepository,
 | 
	
		
			
				|  |  | +            IUserRepository userRepository
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              _appConfig = appConfig;
 | 
	
		
			
				|  |  |              _permissionRepository = permissionRepository;
 | 
	
		
			
				|  |  |              _roleRepository = roleRepository;
 | 
	
		
			
				|  |  |              _rolePermissionRepository = rolePermissionRepository;
 | 
	
		
			
				|  |  | -            _tenantRepository = tenantRepository;
 | 
	
		
			
				|  |  | +            _tenantPermissionRepository = tenantPermissionRepository;
 | 
	
		
			
				|  |  | +            _userRepository = userRepository;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public async Task<IResponseOutput> GetAsync(long id)
 | 
	
	
		
			
				|  | @@ -228,14 +232,54 @@ namespace Admin.Core.Service.Admin.Permission
 | 
	
		
			
				|  |  |              return ResponseOutput.Ok();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        [Transaction]
 | 
	
		
			
				|  |  | +        public async Task<IResponseOutput> SaveTenantPermissionsAsync(PermissionSaveTenantPermissionsInput input)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            //查询租户权限
 | 
	
		
			
				|  |  | +            var permissionIds = await _tenantPermissionRepository.Select.Where(d => d.TenantId == input.TenantId).ToListAsync(m => m.PermissionId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //批量删除租户权限
 | 
	
		
			
				|  |  | +            var deleteIds = permissionIds.Where(d => !input.PermissionIds.Contains(d));
 | 
	
		
			
				|  |  | +            if (deleteIds.Count() > 0)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                await _tenantPermissionRepository.DeleteAsync(m => m.TenantId == input.TenantId && deleteIds.Contains(m.PermissionId));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //批量插入租户权限
 | 
	
		
			
				|  |  | +            var tenatPermissions = new List<TenantPermissionEntity>();
 | 
	
		
			
				|  |  | +            var insertPermissionIds = input.PermissionIds.Where(d => !permissionIds.Contains(d));
 | 
	
		
			
				|  |  | +            if (insertPermissionIds.Count() > 0)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                foreach (var permissionId in insertPermissionIds)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    tenatPermissions.Add(new TenantPermissionEntity()
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        TenantId = input.TenantId,
 | 
	
		
			
				|  |  | +                        PermissionId = permissionId,
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                await _tenantPermissionRepository.InsertAsync(tenatPermissions);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //清除租户下所有用户权限
 | 
	
		
			
				|  |  | +            if (_appConfig.Tenant)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                var userIds = await _userRepository.Select.Where(a => a.TenantId == input.TenantId).ToListAsync(a => a.Id);
 | 
	
		
			
				|  |  | +                foreach(var userId in userIds)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    await Cache.DelAsync(string.Format(CacheKey.UserPermissions, userId));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return ResponseOutput.Ok();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          public async Task<IResponseOutput> GetPermissionList()
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var permissions = await _permissionRepository.Select
 | 
	
		
			
				|  |  | -                .WhereIf(_appConfig.Tenant && User.TenantType == TenantType.Tenant && User.DataIsolationType == DataIsolationType.Share, a =>
 | 
	
		
			
				|  |  | -                    _permissionRepository.Orm.Select<RolePermissionEntity>()
 | 
	
		
			
				|  |  | -                    .InnerJoin<TenantEntity>((b, c) => b.RoleId == c.RoleId && c.Id == User.TenantId)
 | 
	
		
			
				|  |  | -                    .DisableGlobalFilter("Tenant")
 | 
	
		
			
				|  |  | -                    .Where(b => b.PermissionId == a.Id)
 | 
	
		
			
				|  |  | +                .WhereIf(_appConfig.Tenant && User.TenantType == TenantType.Tenant, a =>
 | 
	
		
			
				|  |  | +                    _permissionRepository.Orm.Select<TenantPermissionEntity>()
 | 
	
		
			
				|  |  | +                    .Where(b => b.PermissionId == a.Id && b.TenantId == User.TenantId)
 | 
	
		
			
				|  |  |                      .Any()
 | 
	
		
			
				|  |  |                  )
 | 
	
		
			
				|  |  |                  .OrderBy(a => a.ParentId)
 | 
	
	
		
			
				|  | @@ -267,5 +311,14 @@ namespace Admin.Core.Service.Admin.Permission
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              return ResponseOutput.Ok(permissionIds);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        public async Task<IResponseOutput> GetTenantPermissionList(long tenantId)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            var permissionIds = await _tenantPermissionRepository
 | 
	
		
			
				|  |  | +                .Select.Where(d => d.TenantId == tenantId)
 | 
	
		
			
				|  |  | +                .ToListAsync(a => a.PermissionId);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return ResponseOutput.Ok(permissionIds);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |